@@ -19,7 +19,7 @@ sealed class Narrow {
1919 /// This does not necessarily mean the message list would show this message
2020 /// when navigated to this narrow; in particular it does not address the
2121 /// question of whether the stream or topic, or the sending user, is muted.
22- bool containsMessage (Message message);
22+ bool containsMessage (DisplayableMessage message);
2323
2424 /// This narrow, expressed as an [ApiNarrow] .
2525 ApiNarrow apiEncode ();
@@ -47,7 +47,7 @@ class CombinedFeedNarrow extends Narrow {
4747 const CombinedFeedNarrow ();
4848
4949 @override
50- bool containsMessage (Message message) {
50+ bool containsMessage (DisplayableMessage message) {
5151 return true ;
5252 }
5353
@@ -71,8 +71,12 @@ class ChannelNarrow extends Narrow {
7171 final int streamId;
7272
7373 @override
74- bool containsMessage (Message message) {
75- return message is StreamMessage && message.streamId == streamId;
74+ bool containsMessage (DisplayableMessage message) {
75+ if (message is StreamMessage ) {
76+ return message.streamId == streamId;
77+ }
78+ return message is DisplayableMessage <StreamDestination >
79+ && message.destination.streamId == streamId;
7680 }
7781
7882 @override
@@ -105,9 +109,15 @@ class TopicNarrow extends Narrow implements SendableNarrow {
105109 TopicNarrow sansWith () => TopicNarrow (streamId, topic);
106110
107111 @override
108- bool containsMessage (Message message) {
109- return (message is StreamMessage
110- && message.streamId == streamId && message.topic == topic);
112+ bool containsMessage (DisplayableMessage message) {
113+ if (message is StreamMessage ) {
114+ return message.streamId == streamId && message.topic == topic;
115+ }
116+ if (message case DisplayableMessage <StreamDestination >(: final destination)
117+ when destination.streamId == streamId && destination.topic == topic) {
118+ return true ;
119+ }
120+ return false ;
111121 }
112122
113123 @override
@@ -260,11 +270,13 @@ class DmNarrow extends Narrow implements SendableNarrow {
260270 late final String _key = otherRecipientIds.join (',' );
261271
262272 @override
263- bool containsMessage (Message message) {
264- if (message is ! DmMessage ) return false ;
265- if (message.allRecipientIds.length != allRecipientIds.length) return false ;
273+ bool containsMessage (DisplayableMessage message) {
274+ if (message is ! DisplayableMessage <DmDestination >) return false ;
275+ final messageUserIds = message is DmMessage
276+ ? message.allRecipientIds : message.destination.userIds;
277+ if (messageUserIds.length != allRecipientIds.length) return false ;
266278 int i = 0 ;
267- for (final userId in message.allRecipientIds ) {
279+ for (final userId in messageUserIds ) {
268280 if (userId != allRecipientIds[i]) return false ;
269281 i++ ;
270282 }
@@ -304,7 +316,8 @@ class MentionsNarrow extends Narrow {
304316 const MentionsNarrow ();
305317
306318 @override
307- bool containsMessage (Message message) {
319+ bool containsMessage (DisplayableMessage message) {
320+ if (message is ! Message ) return false ;
308321 return message.flags.any ((flag) {
309322 switch (flag) {
310323 case MessageFlag .mentioned:
@@ -343,7 +356,8 @@ class StarredMessagesNarrow extends Narrow {
343356 ApiNarrow apiEncode () => [ApiNarrowIs (IsOperand .starred)];
344357
345358 @override
346- bool containsMessage (Message message) {
359+ bool containsMessage (DisplayableMessage message) {
360+ if (message is ! Message ) return false ;
347361 return message.flags.contains (MessageFlag .starred);
348362 }
349363
0 commit comments