@@ -25,7 +25,7 @@ use ruma::{
25
25
presence:: PresenceEvent ,
26
26
room:: {
27
27
member:: { MembershipState , RoomMemberEventContent } ,
28
- power_levels:: { PowerLevelAction , RoomPowerLevels , RoomPowerLevelsEventContent } ,
28
+ power_levels:: { PowerLevelAction , RoomPowerLevels } ,
29
29
} ,
30
30
MessageLikeEventType , StateEventType ,
31
31
} ,
@@ -35,7 +35,7 @@ use tracing::debug;
35
35
36
36
use super :: Room ;
37
37
use crate :: {
38
- deserialized_responses:: { DisplayName , MemberEvent , SyncOrStrippedState } ,
38
+ deserialized_responses:: { DisplayName , MemberEvent } ,
39
39
store:: { ambiguity_map:: is_display_name_ambiguous, Result as StoreResult , StateStoreExt } ,
40
40
MinimalRoomMemberEvent ,
41
41
} ;
@@ -166,13 +166,7 @@ impl Room {
166
166
display_names : & ' a [ DisplayName ] ,
167
167
) -> StoreResult < MemberRoomInfo < ' a > > {
168
168
let max_power_level = self . max_power_level ( ) ;
169
- let room_creator = self . inner . read ( ) . creator ( ) . map ( ToOwned :: to_owned) ;
170
-
171
- let power_levels = self
172
- . store
173
- . get_state_event_static ( self . room_id ( ) )
174
- . await ?
175
- . and_then ( |e| e. deserialize ( ) . ok ( ) ) ;
169
+ let power_levels = self . power_levels_or_default ( ) . await ;
176
170
177
171
let users_display_names =
178
172
self . store . get_users_with_display_names ( self . room_id ( ) , display_names) . await ?;
@@ -188,7 +182,6 @@ impl Room {
188
182
Ok ( MemberRoomInfo {
189
183
power_levels : power_levels. into ( ) ,
190
184
max_power_level,
191
- room_creator,
192
185
users_display_names,
193
186
ignored_users,
194
187
} )
@@ -205,9 +198,8 @@ pub struct RoomMember {
205
198
pub ( crate ) profile : Arc < Option < MinimalRoomMemberEvent > > ,
206
199
#[ allow( dead_code) ]
207
200
pub ( crate ) presence : Arc < Option < PresenceEvent > > ,
208
- pub ( crate ) power_levels : Arc < Option < SyncOrStrippedState < RoomPowerLevelsEventContent > > > ,
201
+ pub ( crate ) power_levels : Arc < RoomPowerLevels > ,
209
202
pub ( crate ) max_power_level : i64 ,
210
- pub ( crate ) is_room_creator : bool ,
211
203
pub ( crate ) display_name_ambiguous : bool ,
212
204
pub ( crate ) is_ignored : bool ,
213
205
}
@@ -219,15 +211,9 @@ impl RoomMember {
219
211
presence : Option < PresenceEvent > ,
220
212
room_info : & MemberRoomInfo < ' _ > ,
221
213
) -> Self {
222
- let MemberRoomInfo {
223
- power_levels,
224
- max_power_level,
225
- room_creator,
226
- users_display_names,
227
- ignored_users,
228
- } = room_info;
214
+ let MemberRoomInfo { power_levels, max_power_level, users_display_names, ignored_users } =
215
+ room_info;
229
216
230
- let is_room_creator = room_creator. as_deref ( ) == Some ( event. user_id ( ) ) ;
231
217
let display_name = event. display_name ( ) ;
232
218
let display_name_ambiguous = users_display_names
233
219
. get ( & display_name)
@@ -240,7 +226,6 @@ impl RoomMember {
240
226
presence : presence. into ( ) ,
241
227
power_levels : power_levels. clone ( ) ,
242
228
max_power_level : * max_power_level,
243
- is_room_creator,
244
229
display_name_ambiguous,
245
230
is_ignored,
246
231
}
@@ -301,10 +286,7 @@ impl RoomMember {
301
286
302
287
/// Get the power level of this member.
303
288
pub fn power_level ( & self ) -> i64 {
304
- ( * self . power_levels )
305
- . as_ref ( )
306
- . map ( |e| e. power_levels ( ) . for_user ( self . user_id ( ) ) . into ( ) )
307
- . unwrap_or_else ( || if self . is_room_creator { 100 } else { 0 } )
289
+ self . power_levels . for_user ( self . user_id ( ) ) . into ( )
308
290
}
309
291
310
292
/// Whether this user can ban other users based on the power levels.
@@ -377,11 +359,8 @@ impl RoomMember {
377
359
self . can_do_impl ( |pls| pls. user_can_do ( self . user_id ( ) , action) )
378
360
}
379
361
380
- fn can_do_impl ( & self , f : impl FnOnce ( RoomPowerLevels ) -> bool ) -> bool {
381
- match & * self . power_levels {
382
- Some ( event) => f ( event. power_levels ( ) ) ,
383
- None => self . is_room_creator ,
384
- }
362
+ fn can_do_impl ( & self , f : impl FnOnce ( & RoomPowerLevels ) -> bool ) -> bool {
363
+ f ( & self . power_levels )
385
364
}
386
365
387
366
/// Is the name that the member uses ambiguous in the room.
@@ -405,9 +384,8 @@ impl RoomMember {
405
384
406
385
// Information about the room a member is in.
407
386
pub ( crate ) struct MemberRoomInfo < ' a > {
408
- pub ( crate ) power_levels : Arc < Option < SyncOrStrippedState < RoomPowerLevelsEventContent > > > ,
387
+ pub ( crate ) power_levels : Arc < RoomPowerLevels > ,
409
388
pub ( crate ) max_power_level : i64 ,
410
- pub ( crate ) room_creator : Option < OwnedUserId > ,
411
389
pub ( crate ) users_display_names : HashMap < & ' a DisplayName , BTreeSet < OwnedUserId > > ,
412
390
pub ( crate ) ignored_users : Option < BTreeSet < OwnedUserId > > ,
413
391
}
0 commit comments