mirror of
https://github.com/Llewellynvdm/exa.git
synced 2024-11-26 22:06:26 +00:00
Expect different time formats
This commit is contained in:
parent
aa5b1867dd
commit
98b63705be
@ -6,7 +6,7 @@ use output::Colours;
|
|||||||
use output::{grid, details};
|
use output::{grid, details};
|
||||||
use output::table::{TimeTypes, Environment, SizeFormat, Options as TableOptions};
|
use output::table::{TimeTypes, Environment, SizeFormat, Options as TableOptions};
|
||||||
use output::file_name::Classify;
|
use output::file_name::Classify;
|
||||||
use output::time::TimeFormat;
|
use output::time::{TimeFormat, DefaultFormat};
|
||||||
use options::Misfire;
|
use options::Misfire;
|
||||||
use fs::feature::xattr;
|
use fs::feature::xattr;
|
||||||
|
|
||||||
@ -199,7 +199,7 @@ impl TableOptions {
|
|||||||
fn deduce(matches: &getopts::Matches) -> Result<Self, Misfire> {
|
fn deduce(matches: &getopts::Matches) -> Result<Self, Misfire> {
|
||||||
Ok(TableOptions {
|
Ok(TableOptions {
|
||||||
env: Environment::load_all(),
|
env: Environment::load_all(),
|
||||||
time_format: TimeFormat::deduce(),
|
time_format: TimeFormat::deduce(matches)?,
|
||||||
size_format: SizeFormat::deduce(matches)?,
|
size_format: SizeFormat::deduce(matches)?,
|
||||||
time_types: TimeTypes::deduce(matches)?,
|
time_types: TimeTypes::deduce(matches)?,
|
||||||
inode: matches.opt_present("inode"),
|
inode: matches.opt_present("inode"),
|
||||||
@ -236,6 +236,15 @@ impl SizeFormat {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
impl TimeFormat {
|
||||||
|
|
||||||
|
/// Determine how time should be formatted in timestamp columns.
|
||||||
|
fn deduce(_matches: &getopts::Matches) -> Result<TimeFormat, Misfire> {
|
||||||
|
Ok(TimeFormat::DefaultFormat(DefaultFormat::new()))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
impl TimeTypes {
|
impl TimeTypes {
|
||||||
|
|
||||||
/// Determine which of a file’s time fields should be displayed for it
|
/// Determine which of a file’s time fields should be displayed for it
|
||||||
|
@ -5,8 +5,27 @@ use locale;
|
|||||||
use fs::fields::Time;
|
use fs::fields::Time;
|
||||||
|
|
||||||
|
|
||||||
|
pub enum TimeFormat {
|
||||||
|
DefaultFormat(DefaultFormat),
|
||||||
|
}
|
||||||
|
|
||||||
|
impl TimeFormat {
|
||||||
|
pub fn format_local(&self, time: Time) -> String {
|
||||||
|
match *self {
|
||||||
|
TimeFormat::DefaultFormat(ref fmt) => fmt.format_local(time),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn format_zoned(&self, time: Time, zone: &TimeZone) -> String {
|
||||||
|
match *self {
|
||||||
|
TimeFormat::DefaultFormat(ref fmt) => fmt.format_zoned(time, zone),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
pub struct TimeFormat {
|
pub struct DefaultFormat {
|
||||||
|
|
||||||
/// The year of the current time. This gets used to determine which date
|
/// The year of the current time. This gets used to determine which date
|
||||||
/// format to use.
|
/// format to use.
|
||||||
@ -22,36 +41,8 @@ pub struct TimeFormat {
|
|||||||
pub date_and_year: DateFormat<'static>,
|
pub date_and_year: DateFormat<'static>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl TimeFormat {
|
impl DefaultFormat {
|
||||||
fn is_recent(&self, date: LocalDateTime) -> bool {
|
pub fn new() -> DefaultFormat {
|
||||||
date.year() == self.current_year
|
|
||||||
}
|
|
||||||
|
|
||||||
#[allow(trivial_numeric_casts)]
|
|
||||||
pub fn format_local(&self, time: Time) -> String {
|
|
||||||
let date = LocalDateTime::at(time.seconds as i64);
|
|
||||||
|
|
||||||
if self.is_recent(date) {
|
|
||||||
self.date_and_time.format(&date, &self.locale)
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
self.date_and_year.format(&date, &self.locale)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[allow(trivial_numeric_casts)]
|
|
||||||
pub fn format_zoned(&self, time: Time, zone: &TimeZone) -> String {
|
|
||||||
let date = zone.to_zoned(LocalDateTime::at(time.seconds as i64));
|
|
||||||
|
|
||||||
if self.is_recent(date) {
|
|
||||||
self.date_and_time.format(&date, &self.locale)
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
self.date_and_year.format(&date, &self.locale)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn deduce() -> TimeFormat {
|
|
||||||
use unicode_width::UnicodeWidthStr;
|
use unicode_width::UnicodeWidthStr;
|
||||||
|
|
||||||
let locale = locale::Time::load_user_locale()
|
let locale = locale::Time::load_user_locale()
|
||||||
@ -74,6 +65,37 @@ impl TimeFormat {
|
|||||||
_ => DateFormat::parse("{2>:D} {:M} {5>:Y}").unwrap()
|
_ => DateFormat::parse("{2>:D} {:M} {5>:Y}").unwrap()
|
||||||
};
|
};
|
||||||
|
|
||||||
TimeFormat { current_year, locale, date_and_time, date_and_year }
|
DefaultFormat { current_year, locale, date_and_time, date_and_year }
|
||||||
|
}
|
||||||
|
|
||||||
|
fn is_recent(&self, date: LocalDateTime) -> bool {
|
||||||
|
date.year() == self.current_year
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl DefaultFormat {
|
||||||
|
|
||||||
|
#[allow(trivial_numeric_casts)]
|
||||||
|
fn format_local(&self, time: Time) -> String {
|
||||||
|
let date = LocalDateTime::at(time.seconds as i64);
|
||||||
|
|
||||||
|
if self.is_recent(date) {
|
||||||
|
self.date_and_time.format(&date, &self.locale)
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
self.date_and_year.format(&date, &self.locale)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[allow(trivial_numeric_casts)]
|
||||||
|
fn format_zoned(&self, time: Time, zone: &TimeZone) -> String {
|
||||||
|
let date = zone.to_zoned(LocalDateTime::at(time.seconds as i64));
|
||||||
|
|
||||||
|
if self.is_recent(date) {
|
||||||
|
self.date_and_time.format(&date, &self.locale)
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
self.date_and_year.format(&date, &self.locale)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user