diff --git a/Cargo.lock b/Cargo.lock index ea03922..62e8a98 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -11,6 +11,21 @@ dependencies = [ "memchr", ] +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + [[package]] name = "ansi_term" version = "0.12.1" @@ -73,6 +88,21 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "chrono" +version = "0.4.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec837a71355b28f6556dbd569b37b3f363091c0bd4b2e735674521b4c5fd9bc5" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "js-sys", + "num-traits", + "time", + "wasm-bindgen", + "winapi", +] + [[package]] name = "clap" version = "2.34.0" @@ -376,6 +406,29 @@ dependencies = [ "tokio-native-tls", ] +[[package]] +name = "iana-time-zone" +version = "0.1.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fad5b825842d2b38bd206f3e81d6957625fd7f0a361e345c30e01a0ae2dd613" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + [[package]] name = "idna" version = "0.3.0" @@ -526,6 +579,7 @@ dependencies = [ name = "nextsync" version = "0.1.0" dependencies = [ + "chrono", "clap", "colored", "dotenv", @@ -538,6 +592,15 @@ dependencies = [ "xml-rs", ] +[[package]] +name = "num-traits" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +dependencies = [ + "autocfg", +] + [[package]] name = "num_cpus" version = "1.15.0" @@ -1259,6 +1322,15 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" +dependencies = [ + "windows-targets 0.48.0", +] + [[package]] name = "windows-sys" version = "0.42.0" diff --git a/Cargo.toml b/Cargo.toml index 6b214ff..ed48de4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,3 +16,4 @@ xml-rs = "0.8.0" regex = "1.8.3" lazy_static = "1.4.0" glob = "0.3.1" +chrono = "0.4.26" diff --git a/src/services/req_props.rs b/src/services/req_props.rs index eed9ac8..da507df 100644 --- a/src/services/req_props.rs +++ b/src/services/req_props.rs @@ -1,13 +1,15 @@ -use crate::services::api::{ApiBuilder, ApiError}; -use crate::utils::api::get_relative_s; -use xml::reader::{EventReader, XmlEvent}; use std::io::Cursor; +use xml::reader::{EventReader, XmlEvent}; use reqwest::{Method, Response, Error}; -use crate::utils::api::ApiProps; +use chrono::{Utc, DateTime}; +use crate::services::api::{ApiBuilder, ApiError}; +use crate::utils::time::parse_timestamp; +use crate::utils::api::{get_relative_s, ApiProps}; pub struct ObjProps { pub href: Option, pub relative_s: Option, + pub lastmodified: Option>, } impl Clone for ObjProps { @@ -15,6 +17,7 @@ impl Clone for ObjProps { ObjProps { href: self.href.clone(), relative_s: self.relative_s.clone(), + lastmodified: self.lastmodified.clone(), } } } @@ -24,6 +27,7 @@ impl ObjProps { ObjProps { href: None, relative_s: None, + lastmodified: None, } } } @@ -177,6 +181,9 @@ impl ReqProps { content.href = Some(text.clone()); content.relative_s = Some(get_relative_s(text, &(self.api_props.clone().unwrap()))); }, + "getlastmodified" => { + content.lastmodified = Some(parse_timestamp(&text).unwrap()); + }, _ => (), } val = iter.next() diff --git a/src/utils.rs b/src/utils.rs index 306146e..bb81503 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -2,3 +2,4 @@ pub mod path; pub mod read; pub mod nextsyncignore; pub mod api; +pub mod time; \ No newline at end of file diff --git a/src/utils/time.rs b/src/utils/time.rs new file mode 100644 index 0000000..b8346f1 --- /dev/null +++ b/src/utils/time.rs @@ -0,0 +1,6 @@ +use chrono::{DateTime, TimeZone, Utc, ParseError}; + +pub fn parse_timestamp(timestamp: &str) -> Result, ParseError> { + let format = "%a, %d %b %Y %H:%M:%S %Z"; + Utc.datetime_from_str(timestamp, format) +} \ No newline at end of file