@@ -26,20 +26,20 @@ use ruma::{
26
26
avatar:: ImageInfo as RumaAvatarImageInfo ,
27
27
history_visibility:: HistoryVisibility as RumaHistoryVisibility ,
28
28
join_rules:: JoinRule as RumaJoinRule , message:: RoomMessageEventContentWithoutRelation ,
29
- power_levels :: RoomPowerLevels as RumaPowerLevels , MediaSource ,
29
+ MediaSource ,
30
30
} ,
31
- AnyMessageLikeEventContent , AnySyncTimelineEvent , TimelineEventType ,
31
+ AnyMessageLikeEventContent , AnySyncTimelineEvent ,
32
32
} ,
33
33
EventId , Int , OwnedDeviceId , OwnedRoomOrAliasId , OwnedServerName , OwnedUserId , RoomAliasId ,
34
34
ServerName , UserId ,
35
35
} ;
36
36
use tracing:: { error, warn} ;
37
37
38
+ use self :: power_levels:: RoomPowerLevels ;
38
39
use crate :: {
39
40
chunk_iterator:: ChunkIterator ,
40
41
client:: { JoinRule , RoomVisibility } ,
41
42
error:: { ClientError , MediaInfoError , NotYetImplemented , RoomError } ,
42
- event:: { MessageLikeEventType , StateEventType } ,
43
43
identity_status_change:: IdentityStatusChange ,
44
44
live_location_share:: { LastLocation , LiveLocationShare } ,
45
45
room_info:: RoomInfo ,
@@ -55,6 +55,8 @@ use crate::{
55
55
TaskHandle ,
56
56
} ;
57
57
58
+ mod power_levels;
59
+
58
60
#[ derive( Debug , Clone , uniffi:: Enum ) ]
59
61
pub enum Membership {
60
62
Invited ,
@@ -1228,161 +1230,6 @@ pub fn matrix_to_room_alias_permalink(
1228
1230
Ok ( room_alias. matrix_to_uri ( ) . to_string ( ) )
1229
1231
}
1230
1232
1231
- #[ derive( uniffi:: Object ) ]
1232
- pub struct RoomPowerLevels {
1233
- inner : RumaPowerLevels ,
1234
- }
1235
-
1236
- #[ matrix_sdk_ffi_macros:: export]
1237
- impl RoomPowerLevels {
1238
- fn values ( & self ) -> RoomPowerLevelsValues {
1239
- self . inner . clone ( ) . into ( )
1240
- }
1241
-
1242
- /// Returns true if the user with the given user_id is able to ban in the
1243
- /// room.
1244
- ///
1245
- /// The call may fail if there is an error in getting the power levels.
1246
- pub fn can_user_ban ( & self , user_id : String ) -> Result < bool , ClientError > {
1247
- let user_id = UserId :: parse ( & user_id) ?;
1248
- Ok ( self . inner . user_can_ban ( & user_id) )
1249
- }
1250
-
1251
- /// Returns true if the user with the given user_id is able to redact
1252
- /// their own messages in the room.
1253
- ///
1254
- /// The call may fail if there is an error in getting the power levels.
1255
- pub fn can_user_redact_own ( & self , user_id : String ) -> Result < bool , ClientError > {
1256
- let user_id = UserId :: parse ( & user_id) ?;
1257
- Ok ( self . inner . user_can_redact_own_event ( & user_id) )
1258
- }
1259
-
1260
- /// Returns true if the user with the given user_id is able to redact
1261
- /// messages of other users in the room.
1262
- ///
1263
- /// The call may fail if there is an error in getting the power levels.
1264
- pub fn can_user_redact_other ( & self , user_id : String ) -> Result < bool , ClientError > {
1265
- let user_id = UserId :: parse ( & user_id) ?;
1266
- Ok ( self . inner . user_can_redact_event_of_other ( & user_id) )
1267
- }
1268
-
1269
- /// Returns true if the user with the given user_id is able to kick in the
1270
- /// room.
1271
- ///
1272
- /// The call may fail if there is an error in getting the power levels.
1273
- pub fn can_user_invite ( & self , user_id : String ) -> Result < bool , ClientError > {
1274
- let user_id = UserId :: parse ( & user_id) ?;
1275
- Ok ( self . inner . user_can_invite ( & user_id) )
1276
- }
1277
-
1278
- /// Returns true if the user with the given user_id is able to kick in the
1279
- /// room.
1280
- ///
1281
- /// The call may fail if there is an error in getting the power levels.
1282
- pub fn can_user_kick ( & self , user_id : String ) -> Result < bool , ClientError > {
1283
- let user_id = UserId :: parse ( & user_id) ?;
1284
- Ok ( self . inner . user_can_kick ( & user_id) )
1285
- }
1286
-
1287
- /// Returns true if the user with the given user_id is able to send a
1288
- /// specific state event type in the room.
1289
- ///
1290
- /// The call may fail if there is an error in getting the power levels.
1291
- pub fn can_user_send_state (
1292
- & self ,
1293
- user_id : String ,
1294
- state_event : StateEventType ,
1295
- ) -> Result < bool , ClientError > {
1296
- let user_id = UserId :: parse ( & user_id) ?;
1297
- Ok ( self . inner . user_can_send_state ( & user_id, state_event. into ( ) ) )
1298
- }
1299
-
1300
- /// Returns true if the user with the given user_id is able to send a
1301
- /// specific message type in the room.
1302
- ///
1303
- /// The call may fail if there is an error in getting the power levels.
1304
- pub fn can_user_send_message (
1305
- & self ,
1306
- user_id : String ,
1307
- message : MessageLikeEventType ,
1308
- ) -> Result < bool , ClientError > {
1309
- let user_id = UserId :: parse ( & user_id) ?;
1310
- Ok ( self . inner . user_can_send_message ( & user_id, message. into ( ) ) )
1311
- }
1312
-
1313
- /// Returns true if the user with the given user_id is able to pin or unpin
1314
- /// events in the room.
1315
- ///
1316
- /// The call may fail if there is an error in getting the power levels.
1317
- pub fn can_user_pin_unpin ( & self , user_id : String ) -> Result < bool , ClientError > {
1318
- let user_id = UserId :: parse ( & user_id) ?;
1319
- Ok ( self . inner . user_can_send_state ( & user_id, StateEventType :: RoomPinnedEvents . into ( ) ) )
1320
- }
1321
-
1322
- /// Returns true if the user with the given user_id is able to trigger a
1323
- /// notification in the room.
1324
- ///
1325
- /// The call may fail if there is an error in getting the power levels.
1326
- pub fn can_user_trigger_room_notification ( & self , user_id : String ) -> Result < bool , ClientError > {
1327
- let user_id = UserId :: parse ( & user_id) ?;
1328
- Ok ( self . inner . user_can_trigger_room_notification ( & user_id) )
1329
- }
1330
- }
1331
-
1332
- impl From < RumaPowerLevels > for RoomPowerLevels {
1333
- fn from ( value : RumaPowerLevels ) -> Self {
1334
- Self { inner : value }
1335
- }
1336
- }
1337
-
1338
- #[ derive( uniffi:: Record ) ]
1339
- pub struct RoomPowerLevelsValues {
1340
- /// The level required to ban a user.
1341
- pub ban : i64 ,
1342
- /// The level required to invite a user.
1343
- pub invite : i64 ,
1344
- /// The level required to kick a user.
1345
- pub kick : i64 ,
1346
- /// The level required to redact an event.
1347
- pub redact : i64 ,
1348
- /// The default level required to send message events.
1349
- pub events_default : i64 ,
1350
- /// The default level required to send state events.
1351
- pub state_default : i64 ,
1352
- /// The default power level for every user in the room.
1353
- pub users_default : i64 ,
1354
- /// The level required to change the room's name.
1355
- pub room_name : i64 ,
1356
- /// The level required to change the room's avatar.
1357
- pub room_avatar : i64 ,
1358
- /// The level required to change the room's topic.
1359
- pub room_topic : i64 ,
1360
- }
1361
-
1362
- impl From < RumaPowerLevels > for RoomPowerLevelsValues {
1363
- fn from ( value : RumaPowerLevels ) -> Self {
1364
- fn state_event_level_for (
1365
- power_levels : & RumaPowerLevels ,
1366
- event_type : & TimelineEventType ,
1367
- ) -> i64 {
1368
- let default_state: i64 = power_levels. state_default . into ( ) ;
1369
- power_levels. events . get ( event_type) . map_or ( default_state, |& level| level. into ( ) )
1370
- }
1371
- Self {
1372
- ban : value. ban . into ( ) ,
1373
- invite : value. invite . into ( ) ,
1374
- kick : value. kick . into ( ) ,
1375
- redact : value. redact . into ( ) ,
1376
- events_default : value. events_default . into ( ) ,
1377
- state_default : value. state_default . into ( ) ,
1378
- users_default : value. users_default . into ( ) ,
1379
- room_name : state_event_level_for ( & value, & TimelineEventType :: RoomName ) ,
1380
- room_avatar : state_event_level_for ( & value, & TimelineEventType :: RoomAvatar ) ,
1381
- room_topic : state_event_level_for ( & value, & TimelineEventType :: RoomTopic ) ,
1382
- }
1383
- }
1384
- }
1385
-
1386
1233
#[ matrix_sdk_ffi_macros:: export( callback_interface) ]
1387
1234
pub trait RoomInfoListener : SyncOutsideWasm + SendOutsideWasm {
1388
1235
fn call ( & self , room_info : RoomInfo ) ;
0 commit comments