diff --git a/Cargo.lock b/Cargo.lock index 9ca23aad..5ed72023 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -374,7 +374,6 @@ dependencies = [ "libc", "num-integer", "num-traits", - "time 0.1.43", "winapi", ] @@ -672,7 +671,6 @@ dependencies = [ name = "fractal" version = "0.1.0" dependencies = [ - "chrono", "comrak", "futures", "gettext-rs", diff --git a/Cargo.toml b/Cargo.toml index 80df81b2..8bbb11b0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -18,7 +18,6 @@ tokio = { version = "1.2", features = ["rt", "rt-multi-thread"] } url = "2.2" secret-service = "2.0" html2pango = "0.4" -chrono = "0.4" futures = "0.3" comrak = "0.10" rand = "0.8" diff --git a/src/session/content/item_row.rs b/src/session/content/item_row.rs index cfb86606..9254a404 100644 --- a/src/session/content/item_row.rs +++ b/src/session/content/item_row.rs @@ -1,5 +1,4 @@ use adw::{prelude::*, subclass::prelude::*}; -use chrono::{offset::Local, Datelike}; use gettextrs::gettext; use gtk::{glib, prelude::*, subclass::prelude::*}; @@ -147,14 +146,14 @@ impl ItemRow { } }, ItemType::DayDivider(date) => { - let fmt = if date.year() == Local::today().year() { + let fmt = if date.year() == glib::DateTime::new_now_local().unwrap().year() { // Translators: This is a date format in the day divider without the year gettext("%A, %B %e") } else { // Translators: This is a date format in the day divider with the year gettext("%A, %B %e, %Y") }; - let date = date.format(&fmt).to_string(); + let date = date.format(&fmt).unwrap().to_string(); if let Some(Ok(child)) = self.child().map(|w| w.downcast::()) { child.set_label(&date); diff --git a/src/session/room/event.rs b/src/session/room/event.rs index 41b3603c..61da9939 100644 --- a/src/session/room/event.rs +++ b/src/session/room/event.rs @@ -1,5 +1,4 @@ -use chrono::{offset::Local, DateTime}; -use gtk::{glib, prelude::*, subclass::prelude::*}; +use gtk::{glib, glib::DateTime, prelude::*, subclass::prelude::*}; use matrix_sdk::{ events::{ room::message::MessageType, room::message::Relation, AnyMessageEvent, @@ -11,7 +10,7 @@ use matrix_sdk::{ use crate::fn_event; use crate::session::User; -use std::cell::RefCell; +use std::{cell::RefCell, time::SystemTime}; #[derive(Clone, Debug, glib::GBoxed)] #[gboxed(type_name = "BoxedAnyRoomEvent")] @@ -175,25 +174,29 @@ impl Event { fn_event!(event, event_id).clone() } - pub fn timestamp(&self) -> DateTime { + pub fn timestamp(&self) -> DateTime { let priv_ = imp::Event::from_instance(&self); let event = &*priv_.event.get().unwrap().borrow(); - fn_event!(event, origin_server_ts).clone().into() + let ts = fn_event!(event, origin_server_ts).clone(); + + DateTime::from_unix_utc(ts.duration_since(SystemTime::UNIX_EPOCH).unwrap().as_secs() as i64) + .and_then(|t| t.to_local()) + .unwrap() } pub fn time(&self) -> String { let datetime = self.timestamp(); // FIXME Is there a cleaner way to do that? - let local_time = datetime.format("%X").to_string().to_ascii_lowercase(); + let local_time = datetime.format("%X").unwrap().as_str().to_ascii_lowercase(); if local_time.ends_with("am") || local_time.ends_with("pm") { // Use 12h time format (AM/PM) - datetime.format("%l∶%M %p").to_string() + datetime.format("%l∶%M %p").unwrap().to_string() } else { // Use 24 time format - datetime.format("%R").to_string() + datetime.format("%R").unwrap().to_string() } } diff --git a/src/session/room/item.rs b/src/session/room/item.rs index abc56765..59ebfa4f 100644 --- a/src/session/room/item.rs +++ b/src/session/room/item.rs @@ -1,5 +1,4 @@ -use chrono::{offset::Local, DateTime}; -use gtk::{glib, prelude::*, subclass::prelude::*}; +use gtk::{glib, glib::DateTime, prelude::*, subclass::prelude::*}; use matrix_sdk::{ events::AnyRoomEvent, identifiers::{EventId, UserId}, @@ -12,7 +11,7 @@ use crate::session::room::Event; pub enum ItemType { Event(Event), // TODO: Add item type for grouped events - DayDivider(DateTime), + DayDivider(DateTime), NewMessageDivider, } @@ -123,7 +122,7 @@ impl Item { glib::Object::new(&[("type", &type_)]).expect("Failed to create Item") } - pub fn for_day_divider(day: DateTime) -> Self { + pub fn for_day_divider(day: DateTime) -> Self { let type_ = BoxedItemType(ItemType::DayDivider(day)); glib::Object::new(&[("type", &type_)]).expect("Failed to create Item") } @@ -179,7 +178,7 @@ impl Item { } } - pub fn event_timestamp(&self) -> Option> { + pub fn event_timestamp(&self) -> Option { let priv_ = imp::Item::from_instance(&self); if let ItemType::Event(event) = priv_.type_.get().unwrap() { diff --git a/src/session/room/timeline.rs b/src/session/room/timeline.rs index 9f70f6d3..6a7a9228 100644 --- a/src/session/room/timeline.rs +++ b/src/session/room/timeline.rs @@ -118,8 +118,9 @@ impl Timeline { let mut index = position; for current in list.range(position..position + added) { if let Some(current_timestamp) = current.event_timestamp() { - if Some(current_timestamp.date()) != previous_timestamp.map(|t| t.date()) { - divider.push((index, Item::for_day_divider(current_timestamp))); + if Some(current_timestamp.ymd()) != previous_timestamp.as_ref().map(|t| t.ymd()) + { + divider.push((index, Item::for_day_divider(current_timestamp.clone()))); previous_timestamp = Some(current_timestamp); } }