fractal/session/view/content/room_history/member_timestamp/
mod.rs

1use adw::subclass::prelude::*;
2use gtk::{glib, prelude::*};
3
4pub mod row;
5
6use crate::session::model::Member;
7
8mod imp {
9    use std::cell::Cell;
10
11    use super::*;
12
13    #[derive(Debug, Default, glib::Properties)]
14    #[properties(wrapper_type = super::MemberTimestamp)]
15    pub struct MemberTimestamp {
16        /// The room member.
17        #[property(get, construct_only)]
18        member: glib::WeakRef<Member>,
19        /// The timestamp, in seconds since Unix Epoch.
20        ///
21        /// A value of 0 means no timestamp.
22        #[property(get, construct_only)]
23        timestamp: Cell<u64>,
24    }
25
26    #[glib::object_subclass]
27    impl ObjectSubclass for MemberTimestamp {
28        const NAME: &'static str = "ContentMemberTimestamp";
29        type Type = super::MemberTimestamp;
30    }
31
32    #[glib::derived_properties]
33    impl ObjectImpl for MemberTimestamp {}
34}
35
36glib::wrapper! {
37    /// A room member and a timestamp.
38    pub struct MemberTimestamp(ObjectSubclass<imp::MemberTimestamp>);
39}
40
41impl MemberTimestamp {
42    /// Constructs a new `MemberTimestamp` with the given member and
43    /// timestamp.
44    pub fn new(member: &Member, timestamp: Option<u64>) -> Self {
45        glib::Object::builder()
46            .property("member", member)
47            .property("timestamp", timestamp.unwrap_or_default())
48            .build()
49    }
50}