@@ -19,7 +19,7 @@ sealed class Narrow {
19
19
/// This does not necessarily mean the message list would show this message
20
20
/// when navigated to this narrow; in particular it does not address the
21
21
/// question of whether the stream or topic, or the sending user, is muted.
22
- bool containsMessage (Message message);
22
+ bool containsMessage (DisplayableMessage message);
23
23
24
24
/// This narrow, expressed as an [ApiNarrow] .
25
25
ApiNarrow apiEncode ();
@@ -47,7 +47,7 @@ class CombinedFeedNarrow extends Narrow {
47
47
const CombinedFeedNarrow ();
48
48
49
49
@override
50
- bool containsMessage (Message message) {
50
+ bool containsMessage (DisplayableMessage message) {
51
51
return true ;
52
52
}
53
53
@@ -71,8 +71,12 @@ class ChannelNarrow extends Narrow {
71
71
final int streamId;
72
72
73
73
@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;
76
80
}
77
81
78
82
@override
@@ -105,9 +109,15 @@ class TopicNarrow extends Narrow implements SendableNarrow {
105
109
TopicNarrow sansWith () => TopicNarrow (streamId, topic);
106
110
107
111
@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 ;
111
121
}
112
122
113
123
@override
@@ -260,11 +270,13 @@ class DmNarrow extends Narrow implements SendableNarrow {
260
270
late final String _key = otherRecipientIds.join (',' );
261
271
262
272
@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 ;
266
278
int i = 0 ;
267
- for (final userId in message.allRecipientIds ) {
279
+ for (final userId in messageUserIds ) {
268
280
if (userId != allRecipientIds[i]) return false ;
269
281
i++ ;
270
282
}
@@ -304,7 +316,8 @@ class MentionsNarrow extends Narrow {
304
316
const MentionsNarrow ();
305
317
306
318
@override
307
- bool containsMessage (Message message) {
319
+ bool containsMessage (DisplayableMessage message) {
320
+ if (message is ! Message ) return false ;
308
321
return message.flags.any ((flag) {
309
322
switch (flag) {
310
323
case MessageFlag .mentioned:
@@ -343,7 +356,8 @@ class StarredMessagesNarrow extends Narrow {
343
356
ApiNarrow apiEncode () => [ApiNarrowIs (IsOperand .starred)];
344
357
345
358
@override
346
- bool containsMessage (Message message) {
359
+ bool containsMessage (DisplayableMessage message) {
360
+ if (message is ! Message ) return false ;
347
361
return message.flags.contains (MessageFlag .starred);
348
362
}
349
363
0 commit comments