Skip to content

Commit 7a47731

Browse files
PIG208gnprice
authored andcommitted
msglist [nfc]: Extract MessageListMessageBaseItem
This is NFC because MessageListMessageItem is still the only subclass of it.
1 parent fb6b53b commit 7a47731

File tree

2 files changed

+36
-18
lines changed

2 files changed

+36
-18
lines changed

lib/model/message_list.dart

Lines changed: 30 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -35,18 +35,31 @@ class MessageListDateSeparatorItem extends MessageListItem {
3535
MessageListDateSeparatorItem(this.message);
3636
}
3737

38-
/// A message to show in the message list.
39-
class MessageListMessageItem extends MessageListItem {
40-
final Message message;
41-
ZulipMessageContent content;
38+
/// A [MessageBase] to show in the message list.
39+
sealed class MessageListMessageBaseItem extends MessageListItem {
40+
MessageBase get message;
41+
ZulipMessageContent get content;
4242
bool showSender;
4343
bool isLastInBlock;
4444

45+
MessageListMessageBaseItem({
46+
required this.showSender,
47+
required this.isLastInBlock,
48+
});
49+
}
50+
51+
/// A [Message] to show in the message list.
52+
class MessageListMessageItem extends MessageListMessageBaseItem {
53+
@override
54+
final Message message;
55+
@override
56+
ZulipMessageContent content;
57+
4558
MessageListMessageItem(
4659
this.message,
4760
this.content, {
48-
required this.showSender,
49-
required this.isLastInBlock,
61+
required super.showSender,
62+
required super.isLastInBlock,
5063
});
5164
}
5265

@@ -350,12 +363,12 @@ mixin _MessageSequence {
350363
}
351364

352365
@visibleForTesting
353-
bool haveSameRecipient(Message prevMessage, Message message) {
366+
bool haveSameRecipient(MessageBase prevMessage, MessageBase message) {
354367
return prevMessage.conversation.isSameAs(message.conversation);
355368
}
356369

357370
@visibleForTesting
358-
bool messagesSameDay(Message prevMessage, Message message) {
371+
bool messagesSameDay(MessageBase prevMessage, MessageBase message) {
359372
// TODO memoize [DateTime]s... also use memoized for showing date/time in msglist
360373
final prevTime = DateTime.fromMillisecondsSinceEpoch(prevMessage.timestamp * 1000);
361374
final time = DateTime.fromMillisecondsSinceEpoch(message.timestamp * 1000);
@@ -410,19 +423,20 @@ class MessageListView with ChangeNotifier, _MessageSequence {
410423
/// one way or another.
411424
///
412425
/// See also [_allMessagesVisible].
413-
bool _messageVisible(Message message) {
426+
bool _messageVisible(MessageBase message) {
414427
switch (narrow) {
415428
case CombinedFeedNarrow():
416-
return switch (message) {
417-
StreamMessage() =>
418-
store.isTopicVisible(message.streamId, message.topic),
419-
DmMessage() => true,
429+
return switch (message.conversation) {
430+
StreamConversation(:final streamId, :final topic) =>
431+
store.isTopicVisible(streamId, topic),
432+
DmConversation() => true,
420433
};
421434

422435
case ChannelNarrow(:final streamId):
423-
assert(message is StreamMessage && message.streamId == streamId);
424-
if (message is! StreamMessage) return false;
425-
return store.isTopicVisibleInStream(streamId, message.topic);
436+
assert(message is MessageBase<StreamConversation>
437+
&& message.conversation.streamId == streamId);
438+
if (message is! MessageBase<StreamConversation>) return false;
439+
return store.isTopicVisibleInStream(streamId, message.conversation.topic);
426440

427441
case TopicNarrow():
428442
case DmNarrow():

test/model/message_list_test.dart

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2001,13 +2001,17 @@ extension MessageListDateSeparatorItemChecks on Subject<MessageListDateSeparator
20012001
Subject<MessageBase> get message => has((x) => x.message, 'message');
20022002
}
20032003

2004-
extension MessageListMessageItemChecks on Subject<MessageListMessageItem> {
2005-
Subject<Message> get message => has((x) => x.message, 'message');
2004+
extension MessageListMessageBaseItemChecks on Subject<MessageListMessageBaseItem> {
2005+
Subject<MessageBase> get message => has((x) => x.message, 'message');
20062006
Subject<ZulipMessageContent> get content => has((x) => x.content, 'content');
20072007
Subject<bool> get showSender => has((x) => x.showSender, 'showSender');
20082008
Subject<bool> get isLastInBlock => has((x) => x.isLastInBlock, 'isLastInBlock');
20092009
}
20102010

2011+
extension MessageListMessageItemChecks on Subject<MessageListMessageItem> {
2012+
Subject<Message> get message => has((x) => x.message, 'message');
2013+
}
2014+
20112015
extension MessageListViewChecks on Subject<MessageListView> {
20122016
Subject<PerAccountStore> get store => has((x) => x.store, 'store');
20132017
Subject<Narrow> get narrow => has((x) => x.narrow, 'narrow');

0 commit comments

Comments
 (0)