@@ -66,6 +66,12 @@ mixin UserStore on PerAccountStoreBase {
6666 return getUser (message.senderId)? .fullName
6767 ?? message.senderFullName;
6868 }
69+
70+ /// Whether the user with [userId] is muted by the self-user.
71+ ///
72+ /// Looks for [userId] in a private [Set] ,
73+ /// or in [event.mutedUsers] instead if event is non-null.
74+ bool isUserMuted (int userId, {MutedUsersEvent ? event});
6975}
7076
7177/// The implementation of [UserStore] that does the work.
@@ -81,7 +87,8 @@ class UserStoreImpl extends PerAccountStoreBase with UserStore {
8187 initialSnapshot.realmUsers
8288 .followedBy (initialSnapshot.realmNonActiveUsers)
8389 .followedBy (initialSnapshot.crossRealmBots)
84- .map ((user) => MapEntry (user.userId, user)));
90+ .map ((user) => MapEntry (user.userId, user))),
91+ _mutedUsers = Set .from (initialSnapshot.mutedUsers.map ((item) => item.id));
8592
8693 final Map <int , User > _users;
8794
@@ -91,6 +98,13 @@ class UserStoreImpl extends PerAccountStoreBase with UserStore {
9198 @override
9299 Iterable <User > get allUsers => _users.values;
93100
101+ final Set <int > _mutedUsers;
102+
103+ @override
104+ bool isUserMuted (int userId, {MutedUsersEvent ? event}) {
105+ return (event? .mutedUsers.map ((item) => item.id) ?? _mutedUsers).contains (userId);
106+ }
107+
94108 void handleRealmUserEvent (RealmUserEvent event) {
95109 switch (event) {
96110 case RealmUserAddEvent ():
@@ -129,4 +143,9 @@ class UserStoreImpl extends PerAccountStoreBase with UserStore {
129143 }
130144 }
131145 }
146+
147+ void handleMutedUsersEvent (MutedUsersEvent event) {
148+ _mutedUsers.clear ();
149+ _mutedUsers.addAll (event.mutedUsers.map ((item) => item.id));
150+ }
132151}
0 commit comments