@@ -12,6 +12,7 @@ import 'channel.dart';
12
12
import 'content.dart' ;
13
13
import 'narrow.dart' ;
14
14
import 'store.dart' ;
15
+ import 'user.dart' ;
15
16
16
17
/// The number of messages to fetch in each request.
17
18
const kMessageListFetchBatchSize = 100 ; // TODO tune
@@ -431,7 +432,10 @@ class MessageListView with ChangeNotifier, _MessageSequence {
431
432
return switch (message.conversation) {
432
433
StreamConversation (: final streamId, : final topic) =>
433
434
store.isTopicVisible (streamId, topic),
434
- DmConversation () => true ,
435
+ DmConversation (: final allRecipientIds) => () {
436
+ return ! store.allRecipientsMuted (DmNarrow (
437
+ allRecipientIds: allRecipientIds, selfUserId: store.selfUserId));
438
+ }(),
435
439
};
436
440
437
441
case ChannelNarrow (: final streamId):
@@ -442,8 +446,15 @@ class MessageListView with ChangeNotifier, _MessageSequence {
442
446
443
447
case TopicNarrow ():
444
448
case DmNarrow ():
449
+ return true ;
450
+
445
451
case MentionsNarrow ():
452
+ // case ReactionsNarrow(): // TODO
446
453
case StarredMessagesNarrow ():
454
+ if (message.conversation case DmConversation (: final allRecipientIds)) {
455
+ return ! store.allRecipientsMuted (DmNarrow (
456
+ allRecipientIds: allRecipientIds, selfUserId: store.selfUserId));
457
+ }
447
458
return true ;
448
459
}
449
460
}
@@ -455,12 +466,13 @@ class MessageListView with ChangeNotifier, _MessageSequence {
455
466
switch (narrow) {
456
467
case CombinedFeedNarrow ():
457
468
case ChannelNarrow ():
469
+ case MentionsNarrow ():
470
+ // case ReactionsNarrow(): // TODO
471
+ case StarredMessagesNarrow ():
458
472
return false ;
459
473
460
474
case TopicNarrow ():
461
475
case DmNarrow ():
462
- case MentionsNarrow ():
463
- case StarredMessagesNarrow ():
464
476
return true ;
465
477
}
466
478
}
@@ -484,6 +496,22 @@ class MessageListView with ChangeNotifier, _MessageSequence {
484
496
}
485
497
}
486
498
499
+ /// Whether this event could affect the result that [_messageVisible]
500
+ /// would ever have returned for any possible message in this message list.
501
+ MutenessEffect ? _canAffectMuteness (MutedUsersEvent event) {
502
+ switch (narrow) {
503
+ case CombinedFeedNarrow ():
504
+ case MentionsNarrow ():
505
+ case StarredMessagesNarrow ():
506
+ return store.willChangeIfRecipientMuted (event);
507
+
508
+ case ChannelNarrow ():
509
+ case TopicNarrow ():
510
+ case DmNarrow ():
511
+ return null ;
512
+ }
513
+ }
514
+
487
515
/// Fetch messages, starting from scratch.
488
516
Future <void > fetchInitial () async {
489
517
// TODO(#80): fetch from anchor firstUnread, instead of newest
@@ -662,6 +690,33 @@ class MessageListView with ChangeNotifier, _MessageSequence {
662
690
notifyListeners ();
663
691
}
664
692
693
+ void handleMutedUsersEvent (MutedUsersEvent event) {
694
+ switch (_canAffectMuteness (event)) {
695
+ case MutenessEffect .added:
696
+ if (_removeMessagesWhere ((message) =>
697
+ (message is DmMessage
698
+ && store.allRecipientsMuted (
699
+ DmNarrow .ofMessage (message, selfUserId: store.selfUserId),
700
+ mutedUsers: event.mutedUsers,
701
+ )))) {
702
+ notifyListeners ();
703
+ }
704
+
705
+ case MutenessEffect .removed:
706
+ // TODO get the newly-unmuted messages from the message store
707
+ // For now, we simplify the task by just refetching this message list
708
+ // from scratch.
709
+ if (fetched) {
710
+ _reset ();
711
+ notifyListeners ();
712
+ fetchInitial ();
713
+ }
714
+
715
+ default :
716
+ return ;
717
+ }
718
+ }
719
+
665
720
/// Update data derived from the content of the given message.
666
721
///
667
722
/// This does not notify listeners.
0 commit comments