@@ -13,23 +13,25 @@ class CreateOrEditRoomModel extends SafeChangeNotifier {
1313 CreateOrEditRoomModel ({required Client client}) : _client = client;
1414
1515 final Client _client;
16- Stream <SyncUpdate > get _joinedUpdateStream =>
17- _client.onSync.stream.where ((e) => e.rooms? .join? .isNotEmpty ?? false );
18-
19- Stream <JoinedRoomUpdate ?> _getJoinedRoomUpdate (String ? roomId) =>
20- _joinedUpdateStream.map ((e) => e.rooms? .join? [roomId]);
2116
2217 void init ({required Room ? room, required bool isSpace}) {
2318 _nameDraft = '' ;
2419 _topicDraft = '' ;
25- _enableEncryption = false ;
26- _groupCall = false ;
27- _joinRules = JoinRules .public;
28- _historyVisibility = HistoryVisibility .shared;
20+ _enableEncryptionDraft = false ;
21+ _groupCallDraft = false ;
22+ _visibilityDraft = Visibility .public;
23+ _createRoomPresetDraft = CreateRoomPreset .publicChat;
24+ _historyVisibilityDraft = HistoryVisibility .shared;
2925 _profilesDraft = {};
3026 _avatarDraftFile = null ;
3127 }
3228
29+ Stream <SyncUpdate > get _joinedUpdateStream =>
30+ _client.onSync.stream.where ((e) => e.rooms? .join? .isNotEmpty ?? false );
31+
32+ Stream <JoinedRoomUpdate ?> _getJoinedRoomUpdate (String ? roomId) =>
33+ _joinedUpdateStream.map ((e) => e.rooms? .join? [roomId]);
34+
3335 // ROOM NAME
3436
3537 String _nameDraft = '' ;
@@ -80,13 +82,32 @@ class CreateOrEditRoomModel extends SafeChangeNotifier {
8082 }
8183 }
8284
85+ // ROOM CANONICAL ALIAS
86+
87+ Stream <String > getJoinedRoomCanonicalAliasStream (Room room) =>
88+ _getJoinedRoomUpdate (room.id).map ((_) => room.canonicalAlias).distinct ();
89+
90+ Stream <bool > getCanChangeCanonicalAliasStream (Room room) =>
91+ _getJoinedRoomUpdate (
92+ room.id,
93+ ).map ((_) => room.canChangeCanonicalAlias).distinct ();
94+
95+ Future <void > changeRoomCanonicalAlias (Room room, String text) async {
96+ try {
97+ await room.setCanonicalAlias (text);
98+ } on Exception catch (e, s) {
99+ printMessageInDebugMode (e, s);
100+ rethrow ;
101+ }
102+ }
103+
83104 // ROOM ENCRYPTION
84105
85- bool _enableEncryption = false ;
86- bool get enableEncryption => _enableEncryption ;
87- void setEnableEncryption (bool enableEncryption) {
88- if (enableEncryption == _enableEncryption ) return ;
89- _enableEncryption = enableEncryption;
106+ bool _enableEncryptionDraft = false ;
107+ bool get enableEncryptionDraft => _enableEncryptionDraft ;
108+ void setEnableEncryptionDraft (bool enableEncryption) {
109+ if (enableEncryption == _enableEncryptionDraft ) return ;
110+ _enableEncryptionDraft = enableEncryption;
90111 notifyListeners ();
91112 }
92113
@@ -116,21 +137,21 @@ class CreateOrEditRoomModel extends SafeChangeNotifier {
116137 }
117138 }
118139
119- bool _groupCall = false ;
120- bool get groupCall => _groupCall;
121- void setGroupCall (bool groupCall) {
122- if (groupCall == _groupCall) return ;
123- _groupCall = groupCall;
140+ // ROOM JOIN RULES
141+
142+ Visibility _visibilityDraft = Visibility .public;
143+ Visibility get visibilityDraft => _visibilityDraft;
144+ void setVisibilityDraft (Visibility visibility) {
145+ if (visibility == _visibilityDraft) return ;
146+ _visibilityDraft = visibility;
124147 notifyListeners ();
125148 }
126149
127- // ROOM JOIN RULES
128-
129- JoinRules _joinRules = JoinRules .public;
130- JoinRules get joinRules => _joinRules;
131- void setJoinRules (JoinRules joinRule) {
132- if (joinRule == _joinRules) return ;
133- _joinRules = joinRule;
150+ CreateRoomPreset _createRoomPresetDraft = CreateRoomPreset .publicChat;
151+ CreateRoomPreset get createRoomPresetDraft => _createRoomPresetDraft;
152+ void setCreateRoomPresetDraft (CreateRoomPreset preset) {
153+ if (preset == _createRoomPresetDraft) return ;
154+ _createRoomPresetDraft = preset;
134155 notifyListeners ();
135156 }
136157
@@ -154,11 +175,11 @@ class CreateOrEditRoomModel extends SafeChangeNotifier {
154175
155176 // ROOM HISTORY VISIBILITY
156177
157- HistoryVisibility _historyVisibility = HistoryVisibility .shared;
158- HistoryVisibility get historyVisibility => _historyVisibility ;
159- void setHistoryVisibility (HistoryVisibility historyVisibility) {
160- if (historyVisibility == _historyVisibility ) return ;
161- _historyVisibility = historyVisibility;
178+ HistoryVisibility _historyVisibilityDraft = HistoryVisibility .shared;
179+ HistoryVisibility get historyVisibilityDraft => _historyVisibilityDraft ;
180+ void setHistoryVisibilityDraft (HistoryVisibility historyVisibility) {
181+ if (historyVisibility == _historyVisibilityDraft ) return ;
182+ _historyVisibilityDraft = historyVisibility;
162183 notifyListeners ();
163184 }
164185
@@ -356,53 +377,52 @@ class CreateOrEditRoomModel extends SafeChangeNotifier {
356377 }
357378 }
358379
380+ // GROUP CALL DRAFT
381+
382+ bool _groupCallDraft = false ;
383+ bool get groupCallDraft => _groupCallDraft;
384+ void setGroupCallDraft (bool groupCall) {
385+ if (groupCall == _groupCallDraft) return ;
386+ _groupCallDraft = groupCall;
387+ notifyListeners ();
388+ }
389+
359390 // CREATE ROOM, SPACE OR DIRECT CHAT
360391
361392 Future <Room ?> createRoomOrSpace ({
362- String ? groupName,
363- bool enableEncryption = true ,
364- List <String >? invite,
365- List <StateEvent >? initialState,
366- required JoinRules joinRules,
367- HistoryVisibility ? historyVisibility,
393+ required bool space,
368394 bool waitForSync = true ,
369- bool groupCall = false ,
395+ List < StateEvent > ? initialState ,
370396 bool federated = true ,
371397 Map <String , dynamic >? powerLevelContentOverride,
372- MatrixFile ? avatarFile,
373- bool space = false ,
374- List <Invite3pid >? spaceInvite3pid,
375- String ? spaceRoomVersion,
376- String ? spaceTopic,
377- String ? spaceAliasName,
378398 }) async {
379399 String ? roomId;
380400 try {
381401 roomId = space
382402 ? await _client.createSpace (
383- name: groupName ,
384- visibility: joinRules == JoinRules .private
385- ? Visibility .private
386- : Visibility .public,
387- invite : invite ,
388- invite3pid: spaceInvite3pid ,
389- roomVersion: spaceRoomVersion ,
390- topic: spaceTopic ,
403+ name: _nameDraft ,
404+ visibility: _visibilityDraft,
405+ invite : _profilesDraft
406+ . map ((p) => p.userId)
407+ . toList (growable : false ) ,
408+ invite3pid: null ,
409+ roomVersion: null ,
410+ topic: _topicDraft ,
391411 waitForSync: waitForSync,
392- spaceAliasName: spaceAliasName ,
412+ spaceAliasName: _nameDraft ,
393413 )
394414 : await _client.createGroupChat (
395- groupName: groupName,
396- enableEncryption: enableEncryption,
397- invite: invite,
415+ groupName: _nameDraft,
416+ enableEncryption: _enableEncryptionDraft,
417+ invite: _profilesDraft
418+ .map ((p) => p.userId)
419+ .toList (growable: false ),
398420 initialState: initialState,
399- visibility: joinRules == JoinRules .private
400- ? Visibility .private
401- : Visibility .public,
402-
403- historyVisibility: historyVisibility,
421+ visibility: _visibilityDraft,
422+ preset: _createRoomPresetDraft,
423+ historyVisibility: _historyVisibilityDraft,
404424 waitForSync: waitForSync,
405- groupCall: groupCall ,
425+ groupCall: _groupCallDraft ,
406426 federated: federated,
407427 powerLevelContentOverride: powerLevelContentOverride,
408428 );
@@ -414,9 +434,9 @@ class CreateOrEditRoomModel extends SafeChangeNotifier {
414434 final maybeRoom = _client.getRoomById (roomId);
415435 if (maybeRoom != null ) {
416436 if (maybeRoom.canChangeStateEvent (EventTypes .RoomAvatar ) &&
417- avatarFile ? .bytes != null ) {
437+ _avatarDraftFile ? .bytes != null ) {
418438 try {
419- await maybeRoom.setAvatar (avatarFile );
439+ await maybeRoom.setAvatar (_avatarDraftFile );
420440 } on Exception catch (e, s) {
421441 printMessageInDebugMode (e, s);
422442 }
@@ -543,22 +563,4 @@ class CreateOrEditRoomModel extends SafeChangeNotifier {
543563 rethrow ;
544564 }
545565 }
546-
547- Stream <String > getJoinedRoomCanonicalAliasStream (Room room) =>
548- _getJoinedRoomUpdate (room.id).map ((_) => room.canonicalAlias).distinct ();
549-
550- Stream <bool > getCanChangeCanonicalAliasStream (Room room) =>
551- _getJoinedRoomUpdate (
552- room.id,
553- ).map ((_) => room.canChangeCanonicalAlias).distinct ();
554-
555- Future <void > changeRoomCanonicalAlias (Room room, String text) async {
556- // Implement the logic to change the room's canonical alias
557- try {
558- await room.setCanonicalAlias (text);
559- } on Exception catch (e, s) {
560- printMessageInDebugMode (e, s);
561- rethrow ;
562- }
563- }
564566}
0 commit comments