Skip to content

Commit 7b35dec

Browse files
committed
api: Handle muted_users event
1 parent bda46dd commit 7b35dec

File tree

4 files changed

+52
-4
lines changed

4 files changed

+52
-4
lines changed

lib/api/model/events.dart

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ sealed class Event {
5555
}
5656
// case 'muted_topics': … // TODO(#422) we ignore this feature on older servers
5757
case 'user_topic': return UserTopicEvent.fromJson(json);
58+
case 'muted_users': return MutedUsersEvent.fromJson(json);
5859
case 'message': return MessageEvent.fromJson(json);
5960
case 'update_message': return UpdateMessageEvent.fromJson(json);
6061
case 'delete_message': return DeleteMessageEvent.fromJson(json);
@@ -664,6 +665,24 @@ class UserTopicEvent extends Event {
664665
Map<String, dynamic> toJson() => _$UserTopicEventToJson(this);
665666
}
666667

668+
/// A Zulip event of type `muted_users`: https://zulip.com/api/get-events#muted_users
669+
@JsonSerializable(fieldRename: FieldRename.snake)
670+
class MutedUsersEvent extends Event {
671+
@override
672+
@JsonKey(includeToJson: true)
673+
String get type => 'muted_users';
674+
675+
final List<MutedUserItem> mutedUsers;
676+
677+
MutedUsersEvent({required super.id, required this.mutedUsers});
678+
679+
factory MutedUsersEvent.fromJson(Map<String, dynamic> json) =>
680+
_$MutedUsersEventFromJson(json);
681+
682+
@override
683+
Map<String, dynamic> toJson() => _$MutedUsersEventToJson(this);
684+
}
685+
667686
/// A Zulip event of type `message`: https://zulip.com/api/get-events#message
668687
@JsonSerializable(fieldRename: FieldRename.snake)
669688
class MessageEvent extends Event {

lib/api/model/events.g.dart

Lines changed: 16 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/model/store.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -886,6 +886,11 @@ class PerAccountStore extends PerAccountStoreBase with ChangeNotifier, EmojiStor
886886
_channels.handleUserTopicEvent(event);
887887
notifyListeners();
888888

889+
case MutedUsersEvent():
890+
assert(debugLog("server event: muted_users"));
891+
_users.handleMutedUsersEvent(event);
892+
notifyListeners();
893+
889894
case MessageEvent():
890895
assert(debugLog("server event: message ${jsonEncode(event.message.toJson())}"));
891896
_messages.handleMessageEvent(event);

lib/model/user.dart

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -87,17 +87,16 @@ class UserStoreImpl extends PerAccountStoreBase with UserStore {
8787
.followedBy(initialSnapshot.crossRealmBots)
8888
.map((user) => MapEntry(user.userId, user))),
8989
_mutedUsers = initialSnapshot.mutedUsers,
90-
_mutedUsersSorted = initialSnapshot.mutedUsers
91-
..sort((a, b) => a.id.compareTo(b.id));
90+
_mutedUsersSorted = _sortMutedUsers(initialSnapshot.mutedUsers);
9291

9392
final Map<int, User> _users;
9493

9594
// Currently we don't need this, but we would need it if we wanted to display
9695
// muted users in the order of server.
9796
// ignore: unused_field
98-
final List<MutedUserItem> _mutedUsers;
97+
List<MutedUserItem> _mutedUsers;
9998

100-
final List<MutedUserItem> _mutedUsersSorted;
99+
List<MutedUserItem> _mutedUsersSorted;
101100

102101
@override
103102
User? getUser(int userId) => _users[userId];
@@ -149,4 +148,13 @@ class UserStoreImpl extends PerAccountStoreBase with UserStore {
149148
}
150149
}
151150
}
151+
152+
void handleMutedUsersEvent(MutedUsersEvent event) {
153+
_mutedUsers = event.mutedUsers;
154+
_mutedUsersSorted = _sortMutedUsers(event.mutedUsers);
155+
}
156+
157+
static List<MutedUserItem> _sortMutedUsers(List<MutedUserItem> mutedUsers) {
158+
return mutedUsers..sort((a, b) => a.id.compareTo(b.id));
159+
}
152160
}

0 commit comments

Comments
 (0)