@@ -37,17 +37,29 @@ class MessageListDateSeparatorItem extends MessageListItem {
37
37
}
38
38
39
39
/// A message to show in the message list.
40
- class MessageListMessageItem extends MessageListItem {
41
- final Message message;
42
- ZulipMessageContent content;
40
+ sealed class MessageListMessageBaseItem extends MessageListItem {
41
+ MessageBase get message;
42
+ ZulipMessageContent get content;
43
43
bool showSender;
44
44
bool isLastInBlock;
45
45
46
+ MessageListMessageBaseItem ({
47
+ required this .showSender,
48
+ required this .isLastInBlock,
49
+ });
50
+ }
51
+
52
+ class MessageListMessageItem extends MessageListMessageBaseItem {
53
+ @override
54
+ final Message message;
55
+ @override
56
+ ZulipMessageContent content;
57
+
46
58
MessageListMessageItem (
47
59
this .message,
48
60
this .content, {
49
- required this .showSender,
50
- required this .isLastInBlock,
61
+ required super .showSender,
62
+ required super .isLastInBlock,
51
63
});
52
64
}
53
65
@@ -289,14 +301,15 @@ mixin _MessageSequence {
289
301
///
290
302
/// Returns whether an item has been appended or not.
291
303
///
292
- /// The caller must append a [MessageListMessageItem] after this.
293
- bool _maybeAppendAuxillaryItem (Message message, {required Message ? prevMessage}) {
304
+ /// The caller must append a [MessageListMessageBaseItem] after this.
305
+ bool _maybeAppendAuxillaryItem (MessageBase message, {
306
+ required MessageBase ? prevMessage,
307
+ }) {
294
308
if (prevMessage == null || ! haveSameRecipient (prevMessage, message)) {
295
309
items.add (MessageListRecipientHeaderItem (message));
296
310
return true ;
297
311
} else {
298
- assert (items.last is MessageListMessageItem );
299
- final prevMessageItem = items.last as MessageListMessageItem ;
312
+ final prevMessageItem = items.last as MessageListMessageBaseItem ;
300
313
assert (identical (prevMessageItem.message, prevMessage));
301
314
assert (prevMessageItem.isLastInBlock);
302
315
prevMessageItem.isLastInBlock = false ;
@@ -360,12 +373,14 @@ mixin _MessageSequence {
360
373
}
361
374
362
375
@visibleForTesting
363
- bool haveSameRecipient (Message prevMessage, Message message) {
364
- if (prevMessage is StreamMessage && message is StreamMessage ) {
365
- if (prevMessage.streamId != message.streamId) return false ;
366
- if (prevMessage.topic.canonicalize () != message.topic.canonicalize ()) return false ;
367
- } else if (prevMessage is DmMessage && message is DmMessage ) {
368
- if (! _equalIdSequences (prevMessage.allRecipientIds, message.allRecipientIds)) {
376
+ bool haveSameRecipient (MessageBase prevMessage, MessageBase message) {
377
+ final prevConversation = prevMessage.conversation;
378
+ final conversation = message.conversation;
379
+ if (prevConversation is StreamConversation && conversation is StreamConversation ) {
380
+ if (prevConversation.streamId != conversation.streamId) return false ;
381
+ if (prevConversation.topic.canonicalize () != conversation.topic.canonicalize ()) return false ;
382
+ } else if (prevConversation is DmConversation && conversation is DmConversation ) {
383
+ if (! _equalIdSequences (prevConversation.allRecipientIds, conversation.allRecipientIds)) {
369
384
return false ;
370
385
}
371
386
} else {
@@ -384,7 +399,7 @@ bool haveSameRecipient(Message prevMessage, Message message) {
384
399
}
385
400
386
401
@visibleForTesting
387
- bool messagesSameDay (Message prevMessage, Message message) {
402
+ bool messagesSameDay (MessageBase prevMessage, MessageBase message) {
388
403
// TODO memoize [DateTime]s... also use memoized for showing date/time in msglist
389
404
final prevTime = DateTime .fromMillisecondsSinceEpoch (prevMessage.timestamp * 1000 );
390
405
final time = DateTime .fromMillisecondsSinceEpoch (message.timestamp * 1000 );
@@ -449,19 +464,20 @@ class MessageListView with ChangeNotifier, _MessageSequence {
449
464
/// one way or another.
450
465
///
451
466
/// See also [_allMessagesVisible] .
452
- bool _messageVisible (Message message) {
467
+ bool _messageVisible (MessageBase message) {
453
468
switch (narrow) {
454
469
case CombinedFeedNarrow ():
455
- return switch (message) {
456
- StreamMessage ( ) =>
457
- store.isTopicVisible (message. streamId, message. topic),
458
- DmMessage () => true ,
470
+ return switch (message.conversation ) {
471
+ StreamConversation ( : final streamId, : final topic ) =>
472
+ store.isTopicVisible (streamId, topic),
473
+ DmConversation () => true ,
459
474
};
460
475
461
476
case ChannelNarrow (: final streamId):
462
- assert (message is StreamMessage && message.streamId == streamId);
463
- if (message is ! StreamMessage ) return false ;
464
- return store.isTopicVisibleInStream (streamId, message.topic);
477
+ assert (message is MessageBase <StreamConversation >
478
+ && message.conversation.streamId == streamId);
479
+ if (message is ! MessageBase <StreamConversation >) return false ;
480
+ return store.isTopicVisibleInStream (streamId, message.conversation.topic);
465
481
466
482
case TopicNarrow ():
467
483
case DmNarrow ():
0 commit comments