Skip to content

Commit f0fdb15

Browse files
committed
msglist [nfc]: Extract _maybeAppendAuxiliaryItem
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 e85df14 commit f0fdb15

File tree

1 file changed

+25
-16
lines changed

1 file changed

+25
-16
lines changed

lib/model/message_list.dart

Lines changed: 25 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -297,36 +297,45 @@ mixin _MessageSequence {
297297
_reprocessAll();
298298
}
299299

300-
/// Append to [items] based on the index-th message and its content.
300+
/// Append to [items] an auxiliary item like a date separator and update
301+
/// properties of the previous message item, if necessary.
301302
///
302-
/// The previous messages in the list must already have been processed.
303-
/// This message must already have been parsed and reflected in [contents].
304-
void _processMessage(int index) {
305-
// This will get more complicated to handle the ways that messages interact
306-
// with the display of neighboring messages: sender headings #175
307-
// and date separators #173.
308-
final message = messages[index];
309-
final content = contents[index];
310-
bool canShareSender;
311-
if (index == 0 || !haveSameRecipient(messages[index - 1], message)) {
303+
/// Returns whether an item has been appended or not.
304+
///
305+
/// The caller must append a [MessageListMessageItem] after this.
306+
bool _maybeAppendAuxiliaryItem(Message message, {required Message? prevMessage}) {
307+
if (prevMessage == null || !haveSameRecipient(prevMessage, message)) {
312308
items.add(MessageListRecipientHeaderItem(message));
313-
canShareSender = false;
309+
return true;
314310
} else {
315311
assert(items.last is MessageListMessageItem);
316312
final prevMessageItem = items.last as MessageListMessageItem;
317-
assert(identical(prevMessageItem.message, messages[index - 1]));
313+
assert(identical(prevMessageItem.message, prevMessage));
318314
assert(prevMessageItem.isLastInBlock);
319315
prevMessageItem.isLastInBlock = false;
320316

321317
if (!messagesSameDay(prevMessageItem.message, message)) {
322318
items.add(MessageListDateSeparatorItem(message));
323-
canShareSender = false;
319+
return true;
324320
} else {
325-
canShareSender = (prevMessageItem.message.senderId == message.senderId);
321+
return false;
326322
}
327323
}
324+
}
325+
326+
/// Append to [items] based on the index-th message and its content.
327+
///
328+
/// The previous messages in the list must already have been processed.
329+
/// This message must already have been parsed and reflected in [contents].
330+
void _processMessage(int index) {
331+
final prevMessage = index == 0 ? null : messages[index - 1];
332+
final message = messages[index];
333+
final content = contents[index];
334+
335+
final appended = _maybeAppendAuxiliaryItem(message, prevMessage: prevMessage);
328336
items.add(MessageListMessageItem(message, content,
329-
showSender: !canShareSender, isLastInBlock: true));
337+
showSender: appended || prevMessage?.senderId != message.senderId,
338+
isLastInBlock: true));
330339
}
331340

332341
/// Update [items] to include markers at start and end as appropriate.

0 commit comments

Comments
 (0)