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