summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBen S <ogham@bsago.me>2015-02-10 18:14:56 +0000
committerBen S <ogham@bsago.me>2015-02-10 18:14:56 +0000
commit2906b8676a9b3e76014d65a9940bf576ce1e4852 (patch)
tree7a27cd4a2d18ef53c4a805ea7707b0dfa5b12286
parente39a20a5d4e522157f6ab09a2d90ef8cd7f46ee3 (diff)
Translate month names into the user's locale
This has been mostly done with changes in the datetime crate's suddenly supporting locales. It's still important that the user's locale is touched only once and cached from that point on, so a struct in output::details has been made public, along with that module. This will change later as that object gains more and more uses thoughout the codes.
-rw-r--r--Cargo.lock29
-rw-r--r--Cargo.toml8
-rw-r--r--src/file.rs29
-rw-r--r--src/main.rs3
-rw-r--r--src/output/details.rs25
-rw-r--r--src/output/mod.rs2
6 files changed, 46 insertions, 50 deletions
diff --git a/Cargo.lock b/Cargo.lock
index a1c74fa..49afb6d 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -3,11 +3,10 @@ name = "exa"
version = "0.1.0"
dependencies = [
"ansi_term 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "datetime 0.1.2 (git+https://github.com/ogham/rust-datetime.git)",
- "datetime_macros 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "datetime 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
"getopts 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
"git2 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)",
- "locale 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "locale 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
"natord 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)",
"number_prefix 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
"pad 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -30,34 +29,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "datetime"
-version = "0.1.2"
-source = "git+https://github.com/ogham/rust-datetime.git#c108628eb3519535821bc7907f2305643465acf5"
-dependencies = [
- "pad 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "regex 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)",
- "regex_macros 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "datetime"
-version = "0.1.2"
+version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
+ "locale 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
"pad 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
"regex 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)",
"regex_macros 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
-name = "datetime_macros"
-version = "0.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "datetime 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "pad 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
name = "gcc"
version = "0.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -124,7 +105,7 @@ dependencies = [
[[package]]
name = "locale"
-version = "0.1.1"
+version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
diff --git a/Cargo.toml b/Cargo.toml
index 516457d..8ba4ced 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -8,9 +8,10 @@ name = "exa"
[dependencies]
ansi_term = "0.4.5"
-datetime_macros = "0.1.2"
+datetime = "0.1.3"
+#datetime_macros = "0.1.2"
getopts = "0.2.1"
-locale = "0.1.1"
+locale = "0.1.2"
natord = "1.0.7"
number_prefix = "0.2.3"
pad = "0.1.1"
@@ -23,6 +24,3 @@ git = [ "git2" ]
[dependencies.git2]
version = "0.1.13"
optional = true
-
-[dependencies.datetime]
-git = "https://github.com/ogham/rust-datetime.git"
diff --git a/src/file.rs b/src/file.rs
index 8ce8df8..3401f46 100644
--- a/src/file.rs
+++ b/src/file.rs
@@ -8,14 +8,13 @@ use ansi_term::Colour::{Red, Green, Yellow, Blue, Purple, Cyan, Fixed};
use users::Users;
-use pad::Alignment;
-
use locale;
+use output::details::UserLocale;
use number_prefix::{binary_prefix, decimal_prefix, Prefixed, Standalone, PrefixNames};
-use datetime;
use datetime::local::{LocalDateTime, DatePiece};
+use datetime::format::{DateFormat};
use column::{Column, Cell};
use column::Column::*;
@@ -99,14 +98,14 @@ impl<'a> File<'a> {
}
/// Get the data for a column, formatted as a coloured string.
- pub fn display<U: Users>(&self, column: &Column, users_cache: &mut U, locale: &locale::Numeric) -> Cell {
+ pub fn display<U: Users>(&self, column: &Column, users_cache: &mut U, locale: &UserLocale) -> Cell {
match *column {
Permissions => self.permissions_string(),
- FileSize(f) => self.file_size(f, locale),
- Timestamp(t, y) => self.timestamp(t, y),
- HardLinks => self.hard_links(locale),
+ FileSize(f) => self.file_size(f, &locale.numeric),
+ Timestamp(t, y) => self.timestamp(t, y, &locale.time),
+ HardLinks => self.hard_links(&locale.numeric),
Inode => self.inode(),
- Blocks => self.blocks(locale),
+ Blocks => self.blocks(&locale.numeric),
User => self.user(users_cache),
Group => self.group(users_cache),
GitStatus => self.git_status(),
@@ -305,7 +304,7 @@ impl<'a> File<'a> {
}
}
- fn timestamp(&self, time_type: TimeType, current_year: i64) -> Cell {
+ fn timestamp(&self, time_type: TimeType, current_year: i64, locale: &locale::Time) -> Cell {
// Need to convert these values from milliseconds into seconds.
let time_in_seconds = match time_type {
@@ -317,13 +316,13 @@ impl<'a> File<'a> {
let date = LocalDateTime::at(time_in_seconds);
let format = if date.year() == current_year {
- date_format!("{2>:D} {:M} {2>:h}:{02>:m}")
+ DateFormat::parse("{2>:D} {:M} {2>:h}:{02>:m}").unwrap()
}
else {
- date_format!("{2>:D} {:M} {4>:Y}")
+ DateFormat::parse("{2>:D} {:M} {4>:Y}").unwrap()
};
- Cell::paint(Blue.normal(), format.format(date).as_slice())
+ Cell::paint(Blue.normal(), format.format(date, locale).as_slice())
}
/// This file's type, represented by a coloured character.
@@ -447,7 +446,7 @@ pub mod test {
pub use ansi_term::Style::Plain;
pub use ansi_term::Colour::Yellow;
- pub use locale;
+ pub use output::details::UserLocale;
#[test]
fn extension() {
@@ -491,8 +490,8 @@ pub mod test {
}
}
- pub fn dummy_locale() -> locale::Numeric {
- locale::Numeric::default()
+ pub fn dummy_locale() -> UserLocale {
+ UserLocale::default()
}
mod users {
diff --git a/src/main.rs b/src/main.rs
index 2ef9e40..6bddbc0 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1,8 +1,5 @@
#![feature(collections, core, env, io, libc, os, path, plugin, std_misc)]
-#[plugin] #[no_link]
-extern crate datetime_macros;
-
extern crate ansi_term;
extern crate datetime;
extern crate getopts;
diff --git a/src/output/details.rs b/src/output/details.rs
index 973a5e9..93dd4c5 100644
--- a/src/output/details.rs
+++ b/src/output/details.rs
@@ -25,7 +25,7 @@ impl Details {
// padding the fields during output.
let columns = self.columns.for_dir(dir);
- let locale = locale::Numeric::load_user_locale().unwrap_or_else(|_| locale::Numeric::default());
+ let locale = UserLocale::new();
let mut cache = OSUsers::empty_cache();
let mut table = Vec::new();
self.get_files(&columns[], &mut cache, &locale, &mut table, files, 0);
@@ -75,7 +75,7 @@ impl Details {
}
}
- fn get_files(&self, columns: &[Column], cache: &mut OSUsers, locale: &locale::Numeric, dest: &mut Vec<Row>, src: &[File], depth: usize) {
+ fn get_files(&self, columns: &[Column], cache: &mut OSUsers, locale: &UserLocale, dest: &mut Vec<Row>, src: &[File], depth: usize) {
for (index, file) in src.iter().enumerate() {
let row = Row {
@@ -106,3 +106,24 @@ struct Row {
pub last: bool,
pub children: bool,
}
+
+pub struct UserLocale {
+ pub time: locale::Time,
+ pub numeric: locale::Numeric,
+}
+
+impl UserLocale {
+ pub fn new() -> UserLocale {
+ UserLocale {
+ time: locale::Time::load_user_locale().unwrap_or_else(|_| locale::Time::default()),
+ numeric: locale::Numeric::load_user_locale().unwrap_or_else(|_| locale::Numeric::default()),
+ }
+ }
+
+ pub fn default() -> UserLocale {
+ UserLocale {
+ time: locale::Time::default(),
+ numeric: locale::Numeric::default(),
+ }
+ }
+}
diff --git a/src/output/mod.rs b/src/output/mod.rs
index 054e6bf..22b8726 100644
--- a/src/output/mod.rs
+++ b/src/output/mod.rs
@@ -1,5 +1,5 @@
mod grid;
-mod details;
+pub mod details;
mod lines;
pub use self::grid::Grid;