@@ -9,21 +9,21 @@ import '../../common/logging.dart';
99import '../../common/platforms.dart' ;
1010import '../../common/room_x.dart' ;
1111
12- class CreateOrEditRoomModel extends SafeChangeNotifier {
12+ class CreateOrEditRoomModel {
1313 CreateOrEditRoomModel ({required Client client}) : _client = client;
1414
1515 final Client _client;
1616
1717 void init ({required Room ? room, required bool isSpace}) {
18- _nameDraft = '' ;
19- _topicDraft = '' ;
20- _enableEncryptionDraft = false ;
21- _groupCallDraft = false ;
22- _visibilityDraft = Visibility .public;
23- _createRoomPresetDraft = CreateRoomPreset .publicChat;
24- _historyVisibilityDraft = HistoryVisibility .shared;
25- _profilesDraft = {};
26- _avatarDraftFile = null ;
18+ nameDraft.value = '' ;
19+ topicDraft.value = '' ;
20+ enableEncryptionDraft.value = false ;
21+ groupCallDraft.value = false ;
22+ visibilityDraft.value = Visibility .public;
23+ createRoomPresetDraft.value = CreateRoomPreset .publicChat;
24+ historyVisibilityDraft.value = HistoryVisibility .shared;
25+ profilesDraft.value = {};
26+ avatarDraft.value = null ;
2727 }
2828
2929 Stream <SyncUpdate > get _joinedUpdateStream =>
@@ -34,13 +34,7 @@ class CreateOrEditRoomModel extends SafeChangeNotifier {
3434
3535 // ROOM NAME
3636
37- String _nameDraft = '' ;
38- String get nameDraft => _nameDraft;
39- void setNameDraft (String name) {
40- if (name == _nameDraft) return ;
41- _nameDraft = name;
42- notifyListeners ();
43- }
37+ SafeValueNotifier <String > nameDraft = SafeValueNotifier ('' );
4438
4539 Stream <String > getJoinedRoomNameStream (Room room) =>
4640 _getJoinedRoomUpdate (room.id).map ((_) => room.name).distinct ();
@@ -59,13 +53,7 @@ class CreateOrEditRoomModel extends SafeChangeNotifier {
5953
6054 // ROOM TOPIC
6155
62- String _topicDraft = '' ;
63- String get topicDraft => _topicDraft;
64- void setTopicDraft (String topic) {
65- if (topic == _topicDraft) return ;
66- _topicDraft = topic;
67- notifyListeners ();
68- }
56+ SafeValueNotifier <String > topicDraft = SafeValueNotifier ('' );
6957
7058 Stream <String > getJoinedRoomTopicStream (Room room) =>
7159 _getJoinedRoomUpdate (room.id).map ((_) => room.topic).distinct ();
@@ -103,13 +91,7 @@ class CreateOrEditRoomModel extends SafeChangeNotifier {
10391
10492 // ROOM ENCRYPTION
10593
106- bool _enableEncryptionDraft = false ;
107- bool get enableEncryptionDraft => _enableEncryptionDraft;
108- void setEnableEncryptionDraft (bool enableEncryption) {
109- if (enableEncryption == _enableEncryptionDraft) return ;
110- _enableEncryptionDraft = enableEncryption;
111- notifyListeners ();
112- }
94+ SafeValueNotifier <bool > enableEncryptionDraft = SafeValueNotifier (false );
11395
11496 Stream <bool ?> getIsRoomEncryptedStream (Room ? room) =>
11597 _getJoinedRoomUpdate (room? .id)
@@ -139,21 +121,12 @@ class CreateOrEditRoomModel extends SafeChangeNotifier {
139121
140122 // ROOM JOIN RULES
141123
142- Visibility _visibilityDraft = Visibility .public;
143- Visibility get visibilityDraft => _visibilityDraft;
144- void setVisibilityDraft (Visibility visibility) {
145- if (visibility == _visibilityDraft) return ;
146- _visibilityDraft = visibility;
147- notifyListeners ();
148- }
149-
150- CreateRoomPreset _createRoomPresetDraft = CreateRoomPreset .publicChat;
151- CreateRoomPreset get createRoomPresetDraft => _createRoomPresetDraft;
152- void setCreateRoomPresetDraft (CreateRoomPreset preset) {
153- if (preset == _createRoomPresetDraft) return ;
154- _createRoomPresetDraft = preset;
155- notifyListeners ();
156- }
124+ SafeValueNotifier <CreateRoomPreset > createRoomPresetDraft = SafeValueNotifier (
125+ CreateRoomPreset .publicChat,
126+ );
127+ SafeValueNotifier <Visibility > visibilityDraft = SafeValueNotifier (
128+ Visibility .public,
129+ );
157130
158131 Future <void > setJoinRulesForRoom ({
159132 required Room room,
@@ -175,13 +148,8 @@ class CreateOrEditRoomModel extends SafeChangeNotifier {
175148
176149 // ROOM HISTORY VISIBILITY
177150
178- HistoryVisibility _historyVisibilityDraft = HistoryVisibility .shared;
179- HistoryVisibility get historyVisibilityDraft => _historyVisibilityDraft;
180- void setHistoryVisibilityDraft (HistoryVisibility historyVisibility) {
181- if (historyVisibility == _historyVisibilityDraft) return ;
182- _historyVisibilityDraft = historyVisibility;
183- notifyListeners ();
184- }
151+ SafeValueNotifier <HistoryVisibility > historyVisibilityDraft =
152+ SafeValueNotifier (HistoryVisibility .shared);
185153
186154 Future <void > setHistoryVisibilityForRoom ({
187155 required Room room,
@@ -203,19 +171,16 @@ class CreateOrEditRoomModel extends SafeChangeNotifier {
203171
204172 // ROOM PROFILES DRAFT AND INVITES
205173
206- Set <Profile > _profilesDraft = {};
207- Set <Profile > get profilesDraft => _profilesDraft;
174+ SafeValueNotifier <Set <Profile >> profilesDraft = SafeValueNotifier ({});
208175
209176 void addProfileToDraft (Profile profile) {
210- if (_profilesDraft.contains (profile)) return ;
211- _profilesDraft.add (profile);
212- notifyListeners ();
177+ if (profilesDraft.value.contains (profile)) return ;
178+ profilesDraft.value = {...profilesDraft.value, profile};
213179 }
214180
215181 void removeProfileFromDraft (Profile profile) {
216- if (! _profilesDraft.contains (profile)) return ;
217- _profilesDraft.remove (profile);
218- notifyListeners ();
182+ if (! profilesDraft.value.contains (profile)) return ;
183+ profilesDraft.value = {...profilesDraft.value..remove (profile)};
219184 }
220185
221186 Future <void > inviteUserToRoom ({
@@ -317,8 +282,7 @@ class CreateOrEditRoomModel extends SafeChangeNotifier {
317282
318283 // ROOM AVATAR DRAFT OR UPLOAD
319284
320- MatrixFile ? _avatarDraftFile;
321- MatrixFile ? get avatarDraftFile => _avatarDraftFile;
285+ SafeValueNotifier <MatrixImageFile ?> avatarDraft = SafeValueNotifier (null );
322286
323287 Stream <Uri ?> getJoinedRoomAvatarStream (Room ? room) =>
324288 _getJoinedRoomUpdate (room? .id)
@@ -359,7 +323,7 @@ class CreateOrEditRoomModel extends SafeChangeNotifier {
359323 throw Exception (wrongFormatString);
360324 }
361325
362- _avatarDraftFile = await MatrixImageFile .shrink (
326+ avatarDraft.value = await MatrixImageFile .shrink (
363327 bytes: bytes,
364328 name: xFile.name,
365329 mimeType: mime,
@@ -368,8 +332,8 @@ class CreateOrEditRoomModel extends SafeChangeNotifier {
368332 );
369333
370334 if (room != null ) {
371- await room.setAvatar (_avatarDraftFile );
372- _avatarDraftFile = null ;
335+ await room.setAvatar (avatarDraft.value );
336+ avatarDraft.value = null ;
373337 }
374338 } on Exception catch (e, s) {
375339 printMessageInDebugMode (e, s);
@@ -379,13 +343,7 @@ class CreateOrEditRoomModel extends SafeChangeNotifier {
379343
380344 // GROUP CALL DRAFT
381345
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- }
346+ SafeValueNotifier <bool > groupCallDraft = SafeValueNotifier (false );
389347
390348 // CREATE ROOM, SPACE OR DIRECT CHAT
391349
@@ -400,29 +358,29 @@ class CreateOrEditRoomModel extends SafeChangeNotifier {
400358 try {
401359 roomId = space
402360 ? await _client.createSpace (
403- name: _nameDraft ,
404- visibility: _visibilityDraft ,
405- invite: _profilesDraft
361+ name: nameDraft.value ,
362+ visibility: visibilityDraft.value ,
363+ invite: profilesDraft.value
406364 .map ((p) => p.userId)
407365 .toList (growable: false ),
408366 invite3pid: null ,
409367 roomVersion: null ,
410- topic: _topicDraft ,
368+ topic: topicDraft.value ,
411369 waitForSync: waitForSync,
412- spaceAliasName: _nameDraft ,
370+ spaceAliasName: nameDraft.value ,
413371 )
414372 : await _client.createGroupChat (
415- groupName: _nameDraft ,
416- enableEncryption: _enableEncryptionDraft ,
417- invite: _profilesDraft
373+ groupName: nameDraft.value ,
374+ enableEncryption: enableEncryptionDraft.value ,
375+ invite: profilesDraft.value
418376 .map ((p) => p.userId)
419377 .toList (growable: false ),
420378 initialState: initialState,
421- visibility: _visibilityDraft ,
422- preset: _createRoomPresetDraft ,
423- historyVisibility: _historyVisibilityDraft ,
379+ visibility: visibilityDraft.value ,
380+ preset: createRoomPresetDraft.value ,
381+ historyVisibility: historyVisibilityDraft.value ,
424382 waitForSync: waitForSync,
425- groupCall: _groupCallDraft ,
383+ groupCall: groupCallDraft.value ,
426384 federated: federated,
427385 powerLevelContentOverride: powerLevelContentOverride,
428386 );
@@ -434,9 +392,9 @@ class CreateOrEditRoomModel extends SafeChangeNotifier {
434392 final maybeRoom = _client.getRoomById (roomId);
435393 if (maybeRoom != null ) {
436394 if (maybeRoom.canChangeStateEvent (EventTypes .RoomAvatar ) &&
437- _avatarDraftFile ? .bytes != null ) {
395+ avatarDraft.value ? .bytes != null ) {
438396 try {
439- await maybeRoom.setAvatar (_avatarDraftFile );
397+ await maybeRoom.setAvatar (avatarDraft.value );
440398 } on Exception catch (e, s) {
441399 printMessageInDebugMode (e, s);
442400 }
@@ -511,6 +469,19 @@ class CreateOrEditRoomModel extends SafeChangeNotifier {
511469 }
512470 }
513471
472+ Future <void > forgetAllArchivedRooms () async {
473+ final archivedRooms = _client.archivedRooms;
474+ if (archivedRooms.isEmpty) return ;
475+
476+ try {
477+ await Future .wait (archivedRooms.map ((e) => e.room.forget ()));
478+ await _client.oneShotSync ();
479+ } on Exception catch (e, s) {
480+ printMessageInDebugMode (e, s);
481+ rethrow ;
482+ }
483+ }
484+
514485 Future <Room ?> knockOrJoinRoomChunk (PublicRoomsChunk chunk) async {
515486 final knock = chunk.joinRule == 'knock' ;
516487
@@ -543,7 +514,6 @@ class CreateOrEditRoomModel extends SafeChangeNotifier {
543514
544515 try {
545516 await space.setSpaceChild (room.id);
546- notifyListeners ();
547517 } on Exception catch (e, s) {
548518 printMessageInDebugMode (e, s);
549519 rethrow ;
@@ -557,7 +527,6 @@ class CreateOrEditRoomModel extends SafeChangeNotifier {
557527
558528 try {
559529 await space.removeSpaceChild (room.id);
560- notifyListeners ();
561530 } on Exception catch (e, s) {
562531 printMessageInDebugMode (e, s);
563532 rethrow ;
0 commit comments