@@ -141,6 +141,10 @@ class PerAccountStore extends ChangeNotifier {
141
141
required this .connection,
142
142
required InitialSnapshot initialSnapshot,
143
143
}) : zulipVersion = initialSnapshot.zulipVersion,
144
+ users = Map .fromEntries (initialSnapshot.realmUsers
145
+ .followedBy (initialSnapshot.realmNonActiveUsers)
146
+ .followedBy (initialSnapshot.crossRealmBots)
147
+ .map ((user) => MapEntry (user.userId, user))),
144
148
subscriptions = Map .fromEntries (initialSnapshot.subscriptions.map (
145
149
(subscription) => MapEntry (subscription.streamId, subscription))),
146
150
maxFileUploadSizeMib = initialSnapshot.maxFileUploadSizeMib;
@@ -149,6 +153,7 @@ class PerAccountStore extends ChangeNotifier {
149
153
final ApiConnection connection;
150
154
151
155
final String zulipVersion;
156
+ final Map <int , User > users;
152
157
final Map <int , Subscription > subscriptions;
153
158
final int maxFileUploadSizeMib; // No event for this.
154
159
@@ -182,6 +187,41 @@ class PerAccountStore extends ChangeNotifier {
182
187
} else if (event is AlertWordsEvent ) {
183
188
debugPrint ("server event: alert_words" );
184
189
// We don't yet store this data, so there's nothing to update.
190
+ } else if (event is RealmUserAddEvent ) {
191
+ debugPrint ("server event: realm_user/add" );
192
+ users[event.person.userId] = event.person;
193
+ notifyListeners ();
194
+ } else if (event is RealmUserRemoveEvent ) {
195
+ debugPrint ("server event: realm_user/remove" );
196
+ users.remove (event.userId);
197
+ notifyListeners ();
198
+ } else if (event is RealmUserUpdateEvent ) {
199
+ debugPrint ("server event: realm_user/update" );
200
+ final user = users[event.userId];
201
+ if (user == null ) {
202
+ return ; // TODO log
203
+ }
204
+ if (event.fullName != null ) user.fullName = event.fullName! ;
205
+ if (event.avatarUrl != null ) user.avatarUrl = event.avatarUrl! ;
206
+ if (event.avatarVersion != null ) user.avatarVersion = event.avatarVersion! ;
207
+ if (event.timezone != null ) user.timezone = event.timezone! ;
208
+ if (event.botOwnerId != null ) user.botOwnerId = event.botOwnerId! ;
209
+ if (event.role != null ) user.role = event.role! ;
210
+ if (event.isBillingAdmin != null ) user.isBillingAdmin = event.isBillingAdmin! ;
211
+ if (event.deliveryEmail != null ) user.deliveryEmailStaleDoNotUse = event.deliveryEmail! ;
212
+ if (event.newEmail != null ) user.email = event.newEmail! ;
213
+ if (event.customProfileField != null ) {
214
+ if (user.profileData == null ) {
215
+ return ;
216
+ }
217
+ final update = event.customProfileField! ;
218
+ if (update.value != null ) {
219
+ user.profileData! [update.id] = ProfileFieldUserData (value: update.value! , renderedValue: update.renderedValue);
220
+ } else {
221
+ user.profileData! .remove (update.id);
222
+ }
223
+ }
224
+ notifyListeners ();
185
225
} else if (event is MessageEvent ) {
186
226
debugPrint ("server event: message ${jsonEncode (event .message .toJson ())}" );
187
227
for (final view in _messageListViews) {
0 commit comments