@@ -396,115 +396,130 @@ class PerAccountStore extends ChangeNotifier with StreamStore, MessageStore {
396
396
}
397
397
398
398
Future <void > handleEvent (Event event) async {
399
- if (event is HeartbeatEvent ) {
400
- assert (debugLog ("server event: heartbeat" ));
401
- } else if (event is RealmEmojiUpdateEvent ) {
402
- assert (debugLog ("server event: realm_emoji/update" ));
403
- realmEmoji = event.realmEmoji;
404
- notifyListeners ();
405
- } else if (event is AlertWordsEvent ) {
406
- assert (debugLog ("server event: alert_words" ));
407
- // We don't yet store this data, so there's nothing to update.
408
- } else if (event is UserSettingsUpdateEvent ) {
409
- assert (debugLog ("server event: user_settings/update ${event .property ?.name ?? '[unrecognized]' }" ));
410
- if (event.property == null ) {
411
- // unrecognized setting; do nothing
412
- return ;
413
- }
414
- switch (event.property! ) {
415
- case UserSettingName .twentyFourHourTime:
416
- userSettings? .twentyFourHourTime = event.value as bool ;
417
- case UserSettingName .displayEmojiReactionUsers:
418
- userSettings? .displayEmojiReactionUsers = event.value as bool ;
419
- case UserSettingName .emojiset:
420
- userSettings? .emojiset = event.value as Emojiset ;
421
- }
422
- notifyListeners ();
423
- } else if (event is CustomProfileFieldsEvent ) {
424
- assert (debugLog ("server event: custom_profile_fields" ));
425
- customProfileFields = _sortCustomProfileFields (event.fields);
426
- notifyListeners ();
427
- } else if (event is RealmUserAddEvent ) {
428
- assert (debugLog ("server event: realm_user/add" ));
429
- users[event.person.userId] = event.person;
430
- notifyListeners ();
431
- } else if (event is RealmUserRemoveEvent ) {
432
- assert (debugLog ("server event: realm_user/remove" ));
433
- users.remove (event.userId);
434
- autocompleteViewManager.handleRealmUserRemoveEvent (event);
435
- notifyListeners ();
436
- } else if (event is RealmUserUpdateEvent ) {
437
- assert (debugLog ("server event: realm_user/update" ));
438
- final user = users[event.userId];
439
- if (user == null ) {
440
- return ; // TODO log
441
- }
442
- if (event.fullName != null ) user.fullName = event.fullName! ;
443
- if (event.avatarUrl != null ) user.avatarUrl = event.avatarUrl! ;
444
- if (event.avatarVersion != null ) user.avatarVersion = event.avatarVersion! ;
445
- if (event.timezone != null ) user.timezone = event.timezone! ;
446
- if (event.botOwnerId != null ) user.botOwnerId = event.botOwnerId! ;
447
- if (event.role != null ) user.role = event.role! ;
448
- if (event.isBillingAdmin != null ) user.isBillingAdmin = event.isBillingAdmin! ;
449
- if (event.deliveryEmail != null ) user.deliveryEmail = event.deliveryEmail! .value;
450
- if (event.newEmail != null ) user.email = event.newEmail! ;
451
- if (event.customProfileField != null ) {
452
- final profileData = (user.profileData ?? = {});
453
- final update = event.customProfileField! ;
454
- if (update.value != null ) {
455
- profileData[update.id] = ProfileFieldUserData (value: update.value! , renderedValue: update.renderedValue);
456
- } else {
457
- profileData.remove (update.id);
399
+ switch (event) {
400
+ case HeartbeatEvent ():
401
+ assert (debugLog ("server event: heartbeat" ));
402
+
403
+ case RealmEmojiUpdateEvent ():
404
+ assert (debugLog ("server event: realm_emoji/update" ));
405
+ realmEmoji = event.realmEmoji;
406
+ notifyListeners ();
407
+
408
+ case AlertWordsEvent ():
409
+ assert (debugLog ("server event: alert_words" ));
410
+ // We don't yet store this data, so there's nothing to update.
411
+
412
+ case UserSettingsUpdateEvent ():
413
+ assert (debugLog ("server event: user_settings/update ${event .property ?.name ?? '[unrecognized]' }" ));
414
+ if (event.property == null ) {
415
+ // unrecognized setting; do nothing
416
+ return ;
458
417
}
459
- if (profileData.isEmpty) {
460
- // null is equivalent to `{}` for efficiency; see [User._readProfileData].
461
- user.profileData = null ;
418
+ switch (event.property! ) {
419
+ case UserSettingName .twentyFourHourTime:
420
+ userSettings? .twentyFourHourTime = event.value as bool ;
421
+ case UserSettingName .displayEmojiReactionUsers:
422
+ userSettings? .displayEmojiReactionUsers = event.value as bool ;
423
+ case UserSettingName .emojiset:
424
+ userSettings? .emojiset = event.value as Emojiset ;
462
425
}
463
- }
464
- autocompleteViewManager.handleRealmUserUpdateEvent (event);
465
- notifyListeners ();
466
- } else if (event is StreamEvent ) {
467
- assert (debugLog ("server event: stream/${event .op }" ));
468
- _streams.handleStreamEvent (event);
469
- notifyListeners ();
470
- } else if (event is SubscriptionEvent ) {
471
- assert (debugLog ("server event: subscription/${event .op }" ));
472
- _streams.handleSubscriptionEvent (event);
473
- notifyListeners ();
474
- } else if (event is UserTopicEvent ) {
475
- assert (debugLog ("server event: user_topic" ));
476
- _streams.handleUserTopicEvent (event);
477
- notifyListeners ();
478
- } else if (event is MessageEvent ) {
479
- assert (debugLog ("server event: message ${jsonEncode (event .message .toJson ())}" ));
480
- _messages.handleMessageEvent (event);
481
- unreads.handleMessageEvent (event);
482
- recentDmConversationsView.handleMessageEvent (event);
483
- // When adding anything here (to handle [MessageEvent]),
484
- // it probably belongs in [reconcileMessages] too.
485
- } else if (event is UpdateMessageEvent ) {
486
- assert (debugLog ("server event: update_message ${event .messageId }" ));
487
- _messages.handleUpdateMessageEvent (event);
488
- unreads.handleUpdateMessageEvent (event);
489
- } else if (event is DeleteMessageEvent ) {
490
- assert (debugLog ("server event: delete_message ${event .messageIds }" ));
491
- _messages.handleDeleteMessageEvent (event);
492
- unreads.handleDeleteMessageEvent (event);
493
- } else if (event is UpdateMessageFlagsEvent ) {
494
- assert (debugLog ("server event: update_message_flags/${event .op } ${event .flag .toJson ()}" ));
495
- _messages.handleUpdateMessageFlagsEvent (event);
496
- unreads.handleUpdateMessageFlagsEvent (event);
497
- } else if (event is TypingEvent ) {
498
- assert (debugLog ("server event: typing/${event .op } ${event .messageType }" ));
499
- typingStatus.handleTypingEvent (event);
500
- } else if (event is ReactionEvent ) {
501
- assert (debugLog ("server event: reaction/${event .op }" ));
502
- _messages.handleReactionEvent (event);
503
- } else if (event is UnexpectedEvent ) {
504
- assert (debugLog ("server event: ${jsonEncode (event .toJson ())}" )); // TODO log better
505
- } else {
506
- // TODO(dart-3): Use a sealed class / pattern-matching to exclude this.
507
- throw Exception ("Event object of impossible type: ${event .toString ()}" );
426
+ notifyListeners ();
427
+
428
+ case CustomProfileFieldsEvent ():
429
+ assert (debugLog ("server event: custom_profile_fields" ));
430
+ customProfileFields = _sortCustomProfileFields (event.fields);
431
+ notifyListeners ();
432
+
433
+ case RealmUserAddEvent ():
434
+ assert (debugLog ("server event: realm_user/add" ));
435
+ users[event.person.userId] = event.person;
436
+ notifyListeners ();
437
+
438
+ case RealmUserRemoveEvent ():
439
+ assert (debugLog ("server event: realm_user/remove" ));
440
+ users.remove (event.userId);
441
+ autocompleteViewManager.handleRealmUserRemoveEvent (event);
442
+ notifyListeners ();
443
+
444
+ case RealmUserUpdateEvent ():
445
+ assert (debugLog ("server event: realm_user/update" ));
446
+ final user = users[event.userId];
447
+ if (user == null ) {
448
+ return ; // TODO log
449
+ }
450
+ if (event.fullName != null ) user.fullName = event.fullName! ;
451
+ if (event.avatarUrl != null ) user.avatarUrl = event.avatarUrl! ;
452
+ if (event.avatarVersion != null ) user.avatarVersion = event.avatarVersion! ;
453
+ if (event.timezone != null ) user.timezone = event.timezone! ;
454
+ if (event.botOwnerId != null ) user.botOwnerId = event.botOwnerId! ;
455
+ if (event.role != null ) user.role = event.role! ;
456
+ if (event.isBillingAdmin != null ) user.isBillingAdmin = event.isBillingAdmin! ;
457
+ if (event.deliveryEmail != null ) user.deliveryEmail = event.deliveryEmail! .value;
458
+ if (event.newEmail != null ) user.email = event.newEmail! ;
459
+ if (event.customProfileField != null ) {
460
+ final profileData = (user.profileData ?? = {});
461
+ final update = event.customProfileField! ;
462
+ if (update.value != null ) {
463
+ profileData[update.id] = ProfileFieldUserData (value: update.value! , renderedValue: update.renderedValue);
464
+ } else {
465
+ profileData.remove (update.id);
466
+ }
467
+ if (profileData.isEmpty) {
468
+ // null is equivalent to `{}` for efficiency; see [User._readProfileData].
469
+ user.profileData = null ;
470
+ }
471
+ }
472
+ autocompleteViewManager.handleRealmUserUpdateEvent (event);
473
+ notifyListeners ();
474
+
475
+ case StreamEvent ():
476
+ assert (debugLog ("server event: stream/${event .op }" ));
477
+ _streams.handleStreamEvent (event);
478
+ notifyListeners ();
479
+
480
+ case SubscriptionEvent ():
481
+ assert (debugLog ("server event: subscription/${event .op }" ));
482
+ _streams.handleSubscriptionEvent (event);
483
+ notifyListeners ();
484
+
485
+ case UserTopicEvent ():
486
+ assert (debugLog ("server event: user_topic" ));
487
+ _streams.handleUserTopicEvent (event);
488
+ notifyListeners ();
489
+
490
+ case MessageEvent ():
491
+ assert (debugLog ("server event: message ${jsonEncode (event .message .toJson ())}" ));
492
+ _messages.handleMessageEvent (event);
493
+ unreads.handleMessageEvent (event);
494
+ recentDmConversationsView.handleMessageEvent (event);
495
+ // When adding anything here (to handle [MessageEvent]),
496
+ // it probably belongs in [reconcileMessages] too.
497
+
498
+ case UpdateMessageEvent ():
499
+ assert (debugLog ("server event: update_message ${event .messageId }" ));
500
+ _messages.handleUpdateMessageEvent (event);
501
+ unreads.handleUpdateMessageEvent (event);
502
+
503
+ case DeleteMessageEvent ():
504
+ assert (debugLog ("server event: delete_message ${event .messageIds }" ));
505
+ _messages.handleDeleteMessageEvent (event);
506
+ unreads.handleDeleteMessageEvent (event);
507
+
508
+ case UpdateMessageFlagsEvent ():
509
+ assert (debugLog ("server event: update_message_flags/${event .op } ${event .flag .toJson ()}" ));
510
+ _messages.handleUpdateMessageFlagsEvent (event);
511
+ unreads.handleUpdateMessageFlagsEvent (event);
512
+
513
+ case TypingEvent ():
514
+ assert (debugLog ("server event: typing/${event .op } ${event .messageType }" ));
515
+ typingStatus.handleTypingEvent (event);
516
+
517
+ case ReactionEvent ():
518
+ assert (debugLog ("server event: reaction/${event .op }" ));
519
+ _messages.handleReactionEvent (event);
520
+
521
+ case UnexpectedEvent ():
522
+ assert (debugLog ("server event: ${jsonEncode (event .toJson ())}" )); // TODO log better
508
523
}
509
524
}
510
525
0 commit comments