Browse Source

member: Add power-level property

merge-requests/1327/merge
Kai A. Hiller 5 years ago
parent
commit
22f697c149
  1. 47
      src/session/room/member.rs

47
src/session/room/member.rs

@ -1,4 +1,5 @@
use gtk::glib;
use gtk::prelude::*;
use gtk::subclass::prelude::*;
use matrix_sdk::ruma::events::room::member::MemberEventContent;
use matrix_sdk::ruma::events::{StrippedStateEvent, SyncStateEvent};
@ -10,9 +11,13 @@ use crate::session::{Room, User};
mod imp {
use super::*;
use once_cell::sync::Lazy;
use std::cell::Cell;
#[derive(Debug, Default)]
pub struct Member {}
pub struct Member {
pub power_level: Cell<u32>,
}
#[glib::object_subclass]
impl ObjectSubclass for Member {
@ -21,7 +26,30 @@ mod imp {
type ParentType = User;
}
impl ObjectImpl for Member {}
impl ObjectImpl for Member {
fn properties() -> &'static [glib::ParamSpec] {
static PROPERTIES: Lazy<Vec<glib::ParamSpec>> = Lazy::new(|| {
vec![glib::ParamSpec::new_uint(
"power-level",
"Power level",
"Power level of the member in its room.",
0,
100,
0,
glib::ParamFlags::READABLE | glib::ParamFlags::EXPLICIT_NOTIFY,
)]
});
PROPERTIES.as_ref()
}
fn property(&self, obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
match pspec.name() {
"power-level" => obj.power_level().to_value(),
_ => unimplemented!(),
}
}
}
}
glib::wrapper! {
@ -36,6 +64,20 @@ impl Member {
.expect("Failed to create Member")
}
pub fn power_level(&self) -> u32 {
let priv_ = imp::Member::from_instance(self);
priv_.power_level.get()
}
fn set_power_level(&self, power_level: u32) {
if self.power_level() == power_level {
return;
}
let priv_ = imp::Member::from_instance(self);
priv_.power_level.replace(power_level);
self.notify("power-level");
}
/// Update the user based on the the room member state event
pub fn update_from_room_member(&self, member: &RoomMember) {
if member.user_id() != self.user_id() {
@ -45,6 +87,7 @@ impl Member {
self.set_display_name(member.display_name().map(String::from));
self.avatar().set_url(member.avatar_url().cloned());
self.set_power_level(member.power_level().clamp(0, 100) as u32);
}
/// Update the user based on the the room member state event

Loading…
Cancel
Save