Skip to content

Commit aacf44f

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

File tree

1 file changed

+40
-0
lines changed

1 file changed

+40
-0
lines changed

lib/model/store.dart

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,10 @@ class PerAccountStore extends ChangeNotifier {
141141
required this.connection,
142142
required InitialSnapshot initialSnapshot,
143143
}) : zulipVersion = initialSnapshot.zulipVersion,
144+
users = Map.fromEntries(initialSnapshot.realmUsers
145+
.followedBy(initialSnapshot.realmNonActiveUsers)
146+
.followedBy(initialSnapshot.crossRealmBots)
147+
.map((user) => MapEntry(user.userId, user))),
144148
subscriptions = Map.fromEntries(initialSnapshot.subscriptions.map(
145149
(subscription) => MapEntry(subscription.streamId, subscription))),
146150
maxFileUploadSizeMib = initialSnapshot.maxFileUploadSizeMib;
@@ -149,6 +153,7 @@ class PerAccountStore extends ChangeNotifier {
149153
final ApiConnection connection;
150154

151155
final String zulipVersion;
156+
final Map<int, User> users;
152157
final Map<int, Subscription> subscriptions;
153158
final int maxFileUploadSizeMib; // No event for this.
154159

@@ -182,6 +187,41 @@ class PerAccountStore extends ChangeNotifier {
182187
} else if (event is AlertWordsEvent) {
183188
debugPrint("server event: alert_words");
184189
// 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();
185225
} else if (event is MessageEvent) {
186226
debugPrint("server event: message ${jsonEncode(event.message.toJson())}");
187227
for (final view in _messageListViews) {

0 commit comments

Comments
 (0)