Skip to content

Commit cdfa189

Browse files
committed
store: Add PerAccountStore.users data structure, as Map<int, User>
1 parent d315bb0 commit cdfa189

File tree

1 file changed

+38
-0
lines changed

1 file changed

+38
-0
lines changed

lib/model/store.dart

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,10 @@ class PerAccountStore extends ChangeNotifier {
147147
required this.connection,
148148
required InitialSnapshot initialSnapshot,
149149
}) : zulipVersion = initialSnapshot.zulipVersion,
150+
users = Map.fromEntries(initialSnapshot.realmUsers
151+
.followedBy(initialSnapshot.realmNonActiveUsers)
152+
.followedBy(initialSnapshot.crossRealmBots)
153+
.map((user) => MapEntry(user.userId, user))),
150154
subscriptions = Map.fromEntries(initialSnapshot.subscriptions.map(
151155
(subscription) => MapEntry(subscription.streamId, subscription))),
152156
maxFileUploadSizeMib = initialSnapshot.maxFileUploadSizeMib;
@@ -155,6 +159,7 @@ class PerAccountStore extends ChangeNotifier {
155159
final ApiConnection connection;
156160

157161
final String zulipVersion;
162+
final Map<int, User> users;
158163
final Map<int, Subscription> subscriptions;
159164
final int maxFileUploadSizeMib; // No event for this.
160165

@@ -188,6 +193,39 @@ class PerAccountStore extends ChangeNotifier {
188193
} else if (event is AlertWordsEvent) {
189194
debugPrint("server event: alert_words");
190195
// We don't yet store this data, so there's nothing to update.
196+
} else if (event is RealmUserAddEvent) {
197+
debugPrint("server event: realm_user/add");
198+
users[event.person.userId] = event.person;
199+
notifyListeners();
200+
} else if (event is RealmUserRemoveEvent) {
201+
debugPrint("server event: realm_user/remove");
202+
users.remove(event.userId);
203+
notifyListeners();
204+
} else if (event is RealmUserUpdateEvent) {
205+
debugPrint("server event: realm_user/update");
206+
final user = users[event.userId];
207+
if (user == null) {
208+
return; // TODO log
209+
}
210+
if (event.fullName != null) user.fullName = event.fullName!;
211+
if (event.avatarUrl != null) user.avatarUrl = event.avatarUrl!;
212+
if (event.avatarVersion != null) user.avatarVersion = event.avatarVersion!;
213+
if (event.timezone != null) user.timezone = event.timezone!;
214+
if (event.botOwnerId != null) user.botOwnerId = event.botOwnerId!;
215+
if (event.role != null) user.role = event.role!;
216+
if (event.isBillingAdmin != null) user.isBillingAdmin = event.isBillingAdmin!;
217+
if (event.deliveryEmail != null) user.deliveryEmailStaleDoNotUse = event.deliveryEmail!;
218+
if (event.newEmail != null) user.email = event.newEmail!;
219+
if (event.customProfileField != null) {
220+
final profileData = (user.profileData ??= {});
221+
final update = event.customProfileField!;
222+
if (update.value != null) {
223+
profileData[update.id] = ProfileFieldUserData(value: update.value!, renderedValue: update.renderedValue);
224+
} else {
225+
profileData.remove(update.id);
226+
}
227+
}
228+
notifyListeners();
191229
} else if (event is MessageEvent) {
192230
debugPrint("server event: message ${jsonEncode(event.message.toJson())}");
193231
for (final view in _messageListViews) {

0 commit comments

Comments
 (0)