Skip to content

Commit 7c14e8d

Browse files
committed
msglist [nfc]: Extract _prepareTailForMessage
Also removed a stale comment that refers to resolved issues (zulip#173 and zulip#175). We will reuse this helper when handling outbox messages.
1 parent a87f3b7 commit 7c14e8d

File tree

1 file changed

+21
-15
lines changed

1 file changed

+21
-15
lines changed

lib/model/message_list.dart

+21-15
Original file line numberDiff line numberDiff line change
@@ -282,34 +282,40 @@ mixin _MessageSequence {
282282
_reprocessAll();
283283
}
284284

285-
/// Append to [items] based on the index-th message and its content.
285+
/// Prepare [items] before a [MessageListMessageItem] can be appended.
286286
///
287-
/// The previous messages in the list must already have been processed.
288-
/// This message must already have been parsed and reflected in [contents].
289-
void _processMessage(int index) {
290-
// This will get more complicated to handle the ways that messages interact
291-
// with the display of neighboring messages: sender headings #175
292-
// and date separators #173.
293-
final message = messages[index];
294-
final content = contents[index];
295-
bool canShareSender;
296-
if (index == 0 || !haveSameRecipient(messages[index - 1], message)) {
287+
/// Returns whether the sender can be shared between the items for both
288+
/// messages, as in the negation of [MessageListMessageItem.showSender].
289+
bool _prepareTailForMessage(Message message, {required Message? prevMessage}) {
290+
if (prevMessage == null || !haveSameRecipient(prevMessage, message)) {
297291
items.add(MessageListRecipientHeaderItem(message));
298-
canShareSender = false;
292+
return false;
299293
} else {
300294
assert(items.last is MessageListMessageItem);
301295
final prevMessageItem = items.last as MessageListMessageItem;
302-
assert(identical(prevMessageItem.message, messages[index - 1]));
296+
assert(identical(prevMessageItem.message, prevMessage));
303297
assert(prevMessageItem.isLastInBlock);
304298
prevMessageItem.isLastInBlock = false;
305299

306300
if (!messagesSameDay(prevMessageItem.message, message)) {
307301
items.add(MessageListDateSeparatorItem(message));
308-
canShareSender = false;
302+
return false;
309303
} else {
310-
canShareSender = (prevMessageItem.message.senderId == message.senderId);
304+
return prevMessageItem.message.senderId == message.senderId;
311305
}
312306
}
307+
}
308+
309+
/// Append to [items] based on the index-th message and its content.
310+
///
311+
/// The previous messages in the list must already have been processed.
312+
/// This message must already have been parsed and reflected in [contents].
313+
void _processMessage(int index) {
314+
final prevMessage = index == 0 ? null : messages[index - 1];
315+
final message = messages[index];
316+
final content = contents[index];
317+
318+
final canShareSender = _prepareTailForMessage(message, prevMessage: prevMessage);
313319
items.add(MessageListMessageItem(message, content,
314320
showSender: !canShareSender, isLastInBlock: true));
315321
}

0 commit comments

Comments
 (0)