Skip to content

Commit baea6d7

Browse files
gnpricechrisbobbe
authored andcommitted
store [nfc]: Make handleEvent an async method
With #458, we'll want this method to write changes to the database on certain events, to update the metadata we keep about the user's Zulip servers. When it does that, we'll want it to wait for that write to finish before it moves on to make other changes, and for its caller [UpdateMachine.poll] to similarly wait. That saves us from having to worry about potential races if some later event also wants to make database changes while the first changes haven't finished yet. It also gives us a good foundation for generally not showing the user a confirmation that some change has been made until we've actually saved the change. So to do that, we'll need the method to be async, and to return a Future which its call sites should wait for. That's this commit. It completes a series where we did the same thing for its callers, recursively.
1 parent 0696b71 commit baea6d7

9 files changed

+31
-30
lines changed

integration_test/unreadmarker_test.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,11 +51,11 @@ void main() {
5151

5252
final messages = await setupMessageListPage(tester, 500);
5353
await binding.traceAction(() async {
54-
store.handleEvent(eg.updateMessageFlagsRemoveEvent(
54+
await store.handleEvent(eg.updateMessageFlagsRemoveEvent(
5555
MessageFlag.read,
5656
messages));
5757
await tester.pumpAndSettle();
58-
store.handleEvent(UpdateMessageFlagsAddEvent(
58+
await store.handleEvent(UpdateMessageFlagsAddEvent(
5959
id: 1,
6060
flag: MessageFlag.read,
6161
messages: messages.map((e) => e.id).toList(),

lib/model/store.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -353,7 +353,7 @@ class PerAccountStore extends ChangeNotifier with StreamStore {
353353
super.dispose();
354354
}
355355

356-
void handleEvent(Event event) {
356+
Future<void> handleEvent(Event event) async {
357357
if (event is HeartbeatEvent) {
358358
assert(debugLog("server event: heartbeat"));
359359
} else if (event is RealmEmojiUpdateEvent) {
@@ -711,7 +711,7 @@ class UpdateMachine {
711711

712712
final events = result.events;
713713
for (final event in events) {
714-
store.handleEvent(event);
714+
await store.handleEvent(event);
715715
}
716716
if (events.isNotEmpty) {
717717
lastEventId = events.last.id;

test/model/stream_test.dart

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -62,42 +62,42 @@ void main() {
6262
group('SubscriptionEvent', () {
6363
final stream = eg.stream();
6464

65-
test('SubscriptionProperty.color updates with an int value', () {
65+
test('SubscriptionProperty.color updates with an int value', () async {
6666
final store = eg.store(initialSnapshot: eg.initialSnapshot(
6767
streams: [stream],
6868
subscriptions: [eg.subscription(stream, color: 0xFFFF0000)],
6969
));
7070
check(store.subscriptions[stream.streamId]!.color).equals(0xFFFF0000);
7171

72-
store.handleEvent(SubscriptionUpdateEvent(id: 1,
72+
await store.handleEvent(SubscriptionUpdateEvent(id: 1,
7373
streamId: stream.streamId,
7474
property: SubscriptionProperty.color,
7575
value: 0xFFFF00FF));
7676
check(store.subscriptions[stream.streamId]!.color).equals(0xFFFF00FF);
7777
});
7878

79-
test('SubscriptionProperty.isMuted updates with a boolean value', () {
79+
test('SubscriptionProperty.isMuted updates with a boolean value', () async {
8080
final store = eg.store(initialSnapshot: eg.initialSnapshot(
8181
streams: [stream],
8282
subscriptions: [eg.subscription(stream, isMuted: false)],
8383
));
8484
check(store.subscriptions[stream.streamId]!.isMuted).isFalse();
8585

86-
store.handleEvent(SubscriptionUpdateEvent(id: 1,
86+
await store.handleEvent(SubscriptionUpdateEvent(id: 1,
8787
streamId: stream.streamId,
8888
property: SubscriptionProperty.isMuted,
8989
value: true));
9090
check(store.subscriptions[stream.streamId]!.isMuted).isTrue();
9191
});
9292

93-
test('SubscriptionProperty.inHomeView updates isMuted instead', () {
93+
test('SubscriptionProperty.inHomeView updates isMuted instead', () async {
9494
final store = eg.store(initialSnapshot: eg.initialSnapshot(
9595
streams: [stream],
9696
subscriptions: [eg.subscription(stream, isMuted: false)],
9797
));
9898
check(store.subscriptions[stream.streamId]!.isMuted).isFalse();
9999

100-
store.handleEvent(SubscriptionUpdateEvent(id: 1,
100+
await store.handleEvent(SubscriptionUpdateEvent(id: 1,
101101
streamId: stream.streamId,
102102
property: SubscriptionProperty.inHomeView,
103103
value: false));

test/model/test_store.dart

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ class TestGlobalStore extends GlobalStore {
115115

116116
extension PerAccountStoreTestExtension on PerAccountStore {
117117
Future<void> addUser(User user) async {
118-
handleEvent(RealmUserAddEvent(id: 1, person: user));
118+
await handleEvent(RealmUserAddEvent(id: 1, person: user));
119119
}
120120

121121
Future<void> addUsers(Iterable<User> users) async {
@@ -129,19 +129,19 @@ extension PerAccountStoreTestExtension on PerAccountStore {
129129
}
130130

131131
Future<void> addStreams(List<ZulipStream> streams) async {
132-
handleEvent(StreamCreateEvent(id: 1, streams: streams));
132+
await handleEvent(StreamCreateEvent(id: 1, streams: streams));
133133
}
134134

135135
Future<void> addSubscription(Subscription subscription) async {
136136
await addSubscriptions([subscription]);
137137
}
138138

139139
Future<void> addSubscriptions(List<Subscription> subscriptions) async {
140-
handleEvent(SubscriptionAddEvent(id: 1, subscriptions: subscriptions));
140+
await handleEvent(SubscriptionAddEvent(id: 1, subscriptions: subscriptions));
141141
}
142142

143143
Future<void> addUserTopic(ZulipStream stream, String topic, UserTopicVisibilityPolicy visibilityPolicy) async {
144-
handleEvent(UserTopicEvent(
144+
await handleEvent(UserTopicEvent(
145145
id: 1,
146146
streamId: stream.streamId,
147147
topicName: topic,

test/model/unreads_test.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,8 @@ void main() {
192192
check(model.countInStream (stream.streamId)).equals(5);
193193
check(model.countInStreamNarrow(stream.streamId)).equals(5);
194194

195-
streamStore.handleEvent(SubscriptionUpdateEvent(id: 1, streamId: stream.streamId,
195+
await streamStore.handleEvent(SubscriptionUpdateEvent(id: 1,
196+
streamId: stream.streamId,
196197
property: SubscriptionProperty.isMuted, value: true));
197198
check(model.countInStream (stream.streamId)).equals(2);
198199
check(model.countInStreamNarrow(stream.streamId)).equals(5);

test/widgets/emoji_reaction_test.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -102,12 +102,12 @@ void main() {
102102
await prepare();
103103

104104
await store.addUsers(users);
105-
store.handleEvent(RealmEmojiUpdateEvent(id: 1,
105+
await store.handleEvent(RealmEmojiUpdateEvent(id: 1,
106106
realmEmoji: realmEmoji));
107-
store.handleEvent(UserSettingsUpdateEvent(id: 1,
107+
await store.handleEvent(UserSettingsUpdateEvent(id: 1,
108108
property: UserSettingName.displayEmojiReactionUsers,
109109
value: displayEmojiReactionUsers));
110-
store.handleEvent(UserSettingsUpdateEvent(id: 1,
110+
await store.handleEvent(UserSettingsUpdateEvent(id: 1,
111111
property: UserSettingName.emojiset,
112112
value: emojiset));
113113

test/widgets/inbox_test.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ void main() {
6767

6868
for (final message in unreadMessages) {
6969
assert(!message.flags.contains(MessageFlag.read));
70-
store.handleEvent(MessageEvent(id: 1, message: message));
70+
await store.handleEvent(MessageEvent(id: 1, message: message));
7171
}
7272

7373
await tester.pumpWidget(

test/widgets/message_list_test.dart

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -481,7 +481,7 @@ void main() {
481481
}
482482

483483
Future<void> handleNewAvatarEventAndPump(WidgetTester tester, String avatarUrl) async {
484-
store.handleEvent(RealmUserUpdateEvent(id: 1, userId: eg.selfUser.userId, avatarUrl: avatarUrl));
484+
await store.handleEvent(RealmUserUpdateEvent(id: 1, userId: eg.selfUser.userId, avatarUrl: avatarUrl));
485485
await tester.pump();
486486
}
487487

@@ -575,7 +575,7 @@ void main() {
575575
..value.equals(0.0)
576576
..status.equals(AnimationStatus.dismissed);
577577

578-
store.handleEvent(eg.updateMessageFlagsRemoveEvent(
578+
await store.handleEvent(eg.updateMessageFlagsRemoveEvent(
579579
MessageFlag.read, [message]));
580580
await tester.pump(); // process handleEvent
581581
check(getAnimation(tester, message.id))
@@ -595,7 +595,7 @@ void main() {
595595
..value.equals(1.0)
596596
..status.equals(AnimationStatus.dismissed);
597597

598-
store.handleEvent(UpdateMessageFlagsAddEvent(
598+
await store.handleEvent(UpdateMessageFlagsAddEvent(
599599
id: 1,
600600
flag: MessageFlag.read,
601601
messages: [message.id],
@@ -623,7 +623,7 @@ void main() {
623623
..value.equals(1.0)
624624
..status.equals(AnimationStatus.dismissed);
625625

626-
store.handleEvent(UpdateMessageFlagsAddEvent(
626+
await store.handleEvent(UpdateMessageFlagsAddEvent(
627627
id: 0,
628628
flag: MessageFlag.read,
629629
messages: [message.id],
@@ -643,7 +643,7 @@ void main() {
643643

644644
// introduce new message
645645
final newMessage = eg.streamMessage(flags:[MessageFlag.read]);
646-
store.handleEvent(MessageEvent(id: 0, message: newMessage));
646+
await store.handleEvent(MessageEvent(id: 0, message: newMessage));
647647
await tester.pump(); // process handleEvent
648648
check(find.byType(MessageItem).evaluate()).length.equals(2);
649649
check(getAnimation(tester, message.id))
@@ -678,7 +678,7 @@ void main() {
678678
await setupMessageListPage(tester, messages: [message]);
679679
check(isMarkAsReadButtonVisible(tester)).isFalse();
680680

681-
store.handleEvent(eg.updateMessageFlagsRemoveEvent(
681+
await store.handleEvent(eg.updateMessageFlagsRemoveEvent(
682682
MessageFlag.read, [message]));
683683
await tester.pumpAndSettle();
684684
check(isMarkAsReadButtonVisible(tester)).isTrue();
@@ -692,7 +692,7 @@ void main() {
692692
await setupMessageListPage(tester, messages: [message], unreadMsgs: unreadMsgs);
693693
check(isMarkAsReadButtonVisible(tester)).isTrue();
694694

695-
store.handleEvent(UpdateMessageFlagsAddEvent(
695+
await store.handleEvent(UpdateMessageFlagsAddEvent(
696696
id: 1,
697697
flag: MessageFlag.read,
698698
messages: [message.id],
@@ -714,7 +714,7 @@ void main() {
714714
check(tester.widgetList(find.byType(MessageItem))).length.equals(1);
715715
final before = tester.getTopLeft(find.byType(MessageItem)).dy;
716716

717-
store.handleEvent(UpdateMessageFlagsAddEvent(
717+
await store.handleEvent(UpdateMessageFlagsAddEvent(
718718
id: 1,
719719
flag: MessageFlag.read,
720720
messages: [message.id],

test/widgets/recent_dm_conversations_test.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,11 @@ Future<void> setupPage(WidgetTester tester, {
3939
}
4040

4141
for (final dmMessage in dmMessages) {
42-
store.handleEvent(MessageEvent(id: 1, message: dmMessage));
42+
await store.handleEvent(MessageEvent(id: 1, message: dmMessage));
4343
}
4444

4545
if (newNameForSelfUser != null) {
46-
store.handleEvent(RealmUserUpdateEvent(id: 1, userId: eg.selfUser.userId,
46+
await store.handleEvent(RealmUserUpdateEvent(id: 1, userId: eg.selfUser.userId,
4747
fullName: newNameForSelfUser));
4848
}
4949

@@ -151,7 +151,7 @@ void main() {
151151

152152
Future<void> markMessageAsRead(WidgetTester tester, Message message) async {
153153
final store = await testBinding.globalStore.perAccount(eg.selfAccount.id);
154-
store.handleEvent(UpdateMessageFlagsAddEvent(
154+
await store.handleEvent(UpdateMessageFlagsAddEvent(
155155
id: 1, flag: MessageFlag.read, all: false, messages: [message.id]));
156156
await tester.pump();
157157
}

0 commit comments

Comments
 (0)