@@ -311,14 +311,26 @@ class Unreads extends ChangeNotifier {
311
311
312
312
void handleUpdateMessageFlagsEvent (UpdateMessageFlagsEvent event) {
313
313
switch (event.flag) {
314
- case MessageFlag .starred:
315
314
case MessageFlag .collapsed:
316
315
case MessageFlag .hasAlertWord:
317
316
case MessageFlag .historical:
318
317
case MessageFlag .unknown:
319
318
// These are irrelevant.
320
319
return ;
321
320
321
+ case MessageFlag .starred:
322
+ switch (event) {
323
+ case UpdateMessageFlagsAddEvent ():
324
+ starredMessages.addAll (
325
+ event.messages.where (
326
+ (messageId) => _slowIsPresentInStreams (messageId) || _slowIsPresentInDms (messageId),
327
+ ),
328
+ );
329
+
330
+ case UpdateMessageFlagsRemoveEvent ():
331
+ starredMessages.removeAll (event.messages);
332
+ }
333
+
322
334
case MessageFlag .mentioned:
323
335
case MessageFlag .wildcardMentioned:
324
336
// Empirically, we don't seem to get these events when a message is edited
@@ -350,10 +362,12 @@ class Unreads extends ChangeNotifier {
350
362
streams.clear ();
351
363
dms.clear ();
352
364
mentions.clear ();
365
+ starredMessages.clear ();
353
366
oldUnreadsMissing = false ;
354
367
} else {
355
368
final messageIdsSet = Set .of (event.messages);
356
369
mentions.removeAll (messageIdsSet);
370
+ starredMessages.removeAll (messageIdsSet);
357
371
_slowRemoveAllInStreams (messageIdsSet);
358
372
_slowRemoveAllInDms (messageIdsSet);
359
373
}
@@ -371,6 +385,8 @@ class Unreads extends ChangeNotifier {
371
385
if (detail.mentioned == true ) {
372
386
mentions.add (messageId);
373
387
}
388
+ // TODO support starred messages mark as unread
389
+ // if (event.flag == MessageFlag.read && )
374
390
switch (detail.type) {
375
391
case MessageType .stream:
376
392
final topics = (newlyUnreadInStreams[detail.streamId! ] ?? = {});
0 commit comments