diff --git a/matrix_sdk_base/src/rooms/members.rs b/matrix_sdk_base/src/rooms/members.rs index 2fd0e592..2d517411 100644 --- a/matrix_sdk_base/src/rooms/members.rs +++ b/matrix_sdk_base/src/rooms/members.rs @@ -32,6 +32,7 @@ pub struct RoomMember { pub(crate) presence: Arc>, pub(crate) power_levles: Arc>>, pub(crate) max_power_level: i64, + pub(crate) is_room_creator: bool, } impl RoomMember { @@ -74,6 +75,6 @@ impl RoomMember { .map(|p| (*p).into()) .unwrap_or_else(|| e.content.users_default.into()) }) - .unwrap_or(0) + .unwrap_or_else(|| if self.is_room_creator { 100 } else { 0 }) } } diff --git a/matrix_sdk_base/src/rooms/mod.rs b/matrix_sdk_base/src/rooms/mod.rs index aeadd017..38f38898 100644 --- a/matrix_sdk_base/src/rooms/mod.rs +++ b/matrix_sdk_base/src/rooms/mod.rs @@ -2,7 +2,7 @@ mod members; mod normal; mod stripped; -use matrix_sdk_common::identifiers::UserId; +use matrix_sdk_common::{events::room::create::CreateEventContent, identifiers::UserId}; pub use normal::{Room, RoomInfo, RoomType}; pub use stripped::{StrippedRoom, StrippedRoomInfo}; @@ -125,6 +125,7 @@ pub struct BaseRoomInfo { pub topic: Option, pub encryption: Option, pub tombstone: Option, + pub create: Option, pub max_power_level: i64, } @@ -143,6 +144,14 @@ impl BaseRoomInfo { self.name = n.name().map(|n| n.to_string()); true } + AnyStateEventContent::RoomCreate(c) => { + if self.create.is_none() { + self.create = Some(c.clone()); + true + } else { + false + } + } AnyStateEventContent::RoomCanonicalAlias(a) => { self.canonical_alias = a.alias.clone(); true @@ -179,6 +188,7 @@ impl Default for BaseRoomInfo { encryption: None, tombstone: None, max_power_level: 100, + create: None, } } } diff --git a/matrix_sdk_base/src/rooms/normal.rs b/matrix_sdk_base/src/rooms/normal.rs index 00342402..4d6c6e22 100644 --- a/matrix_sdk_base/src/rooms/normal.rs +++ b/matrix_sdk_base/src/rooms/normal.rs @@ -287,6 +287,15 @@ impl Room { let presence = self.store.get_presence_event(user_id).await; let profile = self.store.get_profile(self.room_id(), user_id).await; let max_power_level = self.max_power_level(); + let is_room_creator = self + .inner + .read() + .unwrap() + .base_info + .create + .as_ref() + .map(|c| &c.creator == user_id) + .unwrap_or(false); let power = self .store @@ -310,6 +319,7 @@ impl Room { presence: presence.into(), power_levles: power.into(), max_power_level, + is_room_creator, }) } }