Browse Source

room: Replace chrono::DateTime with glib::DateTime

merge-requests/1327/merge
Kévin Commaille 5 years ago
parent
commit
ca07e240fa
No known key found for this signature in database
GPG Key ID: 296D60AE1E61661C
  1. 2
      Cargo.lock
  2. 1
      Cargo.toml
  3. 5
      src/session/content/item_row.rs
  4. 19
      src/session/room/event.rs
  5. 9
      src/session/room/item.rs
  6. 5
      src/session/room/timeline.rs

2
Cargo.lock generated

@ -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",

1
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"

5
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::<DividerRow>()) {
child.set_label(&date);

19
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<Local> {
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()
}
}

9
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<Local>),
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<Local>) -> 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<DateTime<Local>> {
pub fn event_timestamp(&self) -> Option<DateTime> {
let priv_ = imp::Item::from_instance(&self);
if let ItemType::Event(event) = priv_.type_.get().unwrap() {

5
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);
}
}

Loading…
Cancel
Save