|
|
|
|
@ -120,19 +120,21 @@ impl User {
|
|
|
|
|
glib::Object::new(&[("session", session), ("user-id", &user_id.as_str())]) |
|
|
|
|
.expect("Failed to create User") |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
pub fn session(&self) -> &Session { |
|
|
|
|
let priv_ = imp::User::from_instance(self); |
|
|
|
|
pub trait UserExt: IsA<User> { |
|
|
|
|
fn session(&self) -> &Session { |
|
|
|
|
let priv_ = imp::User::from_instance(self.upcast_ref()); |
|
|
|
|
priv_.session.get().unwrap() |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
pub fn user_id(&self) -> &UserId { |
|
|
|
|
let priv_ = imp::User::from_instance(self); |
|
|
|
|
fn user_id(&self) -> &UserId { |
|
|
|
|
let priv_ = imp::User::from_instance(self.upcast_ref()); |
|
|
|
|
priv_.user_id.get().unwrap() |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
pub fn display_name(&self) -> String { |
|
|
|
|
let priv_ = imp::User::from_instance(self); |
|
|
|
|
fn display_name(&self) -> String { |
|
|
|
|
let priv_ = imp::User::from_instance(self.upcast_ref()); |
|
|
|
|
|
|
|
|
|
if let Some(display_name) = priv_.display_name.borrow().to_owned() { |
|
|
|
|
display_name |
|
|
|
|
@ -141,24 +143,24 @@ impl User {
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
pub fn set_display_name(&self, display_name: Option<String>) { |
|
|
|
|
let priv_ = imp::User::from_instance(self); |
|
|
|
|
fn set_display_name(&self, display_name: Option<String>) { |
|
|
|
|
let priv_ = imp::User::from_instance(self.upcast_ref()); |
|
|
|
|
priv_.display_name.replace(display_name); |
|
|
|
|
self.notify("display-name"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
pub fn avatar(&self) -> &Avatar { |
|
|
|
|
let priv_ = imp::User::from_instance(self); |
|
|
|
|
fn avatar(&self) -> &Avatar { |
|
|
|
|
let priv_ = imp::User::from_instance(self.upcast_ref()); |
|
|
|
|
priv_.avatar.get().unwrap() |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
pub fn set_avatar_url(&self, url: Option<MxcUri>) { |
|
|
|
|
fn set_avatar_url(&self, url: Option<MxcUri>) { |
|
|
|
|
self.avatar().set_url(url); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/// Update the user based on the the room member state event
|
|
|
|
|
pub fn update_from_room_member(&self, member: &RoomMember) { |
|
|
|
|
let priv_ = imp::User::from_instance(self); |
|
|
|
|
fn update_from_room_member(&self, member: &RoomMember) { |
|
|
|
|
let priv_ = imp::User::from_instance(self.upcast_ref()); |
|
|
|
|
|
|
|
|
|
let user_id = priv_.user_id.get().unwrap(); |
|
|
|
|
if member.user_id().as_str() != user_id { |
|
|
|
|
@ -175,8 +177,8 @@ impl User {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/// Update the user based on the the room member state event
|
|
|
|
|
pub fn update_from_member_event(&self, event: &SyncStateEvent<MemberEventContent>) { |
|
|
|
|
let priv_ = imp::User::from_instance(self); |
|
|
|
|
fn update_from_member_event(&self, event: &SyncStateEvent<MemberEventContent>) { |
|
|
|
|
let priv_ = imp::User::from_instance(self.upcast_ref()); |
|
|
|
|
let user_id = priv_.user_id.get().unwrap(); |
|
|
|
|
if event.sender.as_str() != user_id { |
|
|
|
|
return; |
|
|
|
|
@ -200,12 +202,9 @@ impl User {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/// Update the user based on the the stripped room member state event
|
|
|
|
|
pub fn update_from_stripped_member_event( |
|
|
|
|
&self, |
|
|
|
|
event: &StrippedStateEvent<MemberEventContent>, |
|
|
|
|
) { |
|
|
|
|
fn update_from_stripped_member_event(&self, event: &StrippedStateEvent<MemberEventContent>) { |
|
|
|
|
let changed = { |
|
|
|
|
let priv_ = imp::User::from_instance(self); |
|
|
|
|
let priv_ = imp::User::from_instance(self.upcast_ref()); |
|
|
|
|
let user_id = priv_.user_id.get().unwrap(); |
|
|
|
|
if event.sender.as_str() != user_id { |
|
|
|
|
return; |
|
|
|
|
@ -237,3 +236,15 @@ impl User {
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
impl<T: IsA<User>> UserExt for T {} |
|
|
|
|
|
|
|
|
|
unsafe impl<T: ObjectImpl + 'static> IsSubclassable<T> for User { |
|
|
|
|
fn class_init(class: &mut glib::Class<Self>) { |
|
|
|
|
<glib::Object as IsSubclassable<T>>::class_init(class.upcast_ref_mut()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
fn instance_init(instance: &mut glib::subclass::InitializingObject<T>) { |
|
|
|
|
<glib::Object as IsSubclassable<T>>::instance_init(instance); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|