Skip to content

Commit 157c685

Browse files
PIG208gnprice
authored andcommitted
store [nfc]: Replace else-if's with switch for handleEvent.
Signed-off-by: Zixuan James Li <[email protected]>
1 parent 2da37f0 commit 157c685

File tree

1 file changed

+122
-107
lines changed

1 file changed

+122
-107
lines changed

lib/model/store.dart

Lines changed: 122 additions & 107 deletions
Original file line numberDiff line numberDiff line change
@@ -396,115 +396,130 @@ class PerAccountStore extends ChangeNotifier with StreamStore, MessageStore {
396396
}
397397

398398
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;
458417
}
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;
462425
}
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
508523
}
509524
}
510525

0 commit comments

Comments
 (0)