Skip to content

Commit d894bb8

Browse files
committed
msglist [nfc]: Extract _maybeAppendAuxillaryItem
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 f1615d4 commit d894bb8

File tree

1 file changed

+25
-16
lines changed

1 file changed

+25
-16
lines changed

lib/model/message_list.dart

+25-16
Original file line numberDiff line numberDiff line change
@@ -282,36 +282,45 @@ mixin _MessageSequence {
282282
_reprocessAll();
283283
}
284284

285-
/// Append to [items] based on the index-th message and its content.
285+
/// Append to [items] an auxillary item like a date separator and update
286+
/// properties of the previous message item, if necessary.
286287
///
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)) {
288+
/// Returns whether an item has been appended or not.
289+
///
290+
/// The caller must append a [MessageListMessageItem] after this.
291+
bool _maybeAppendAuxillaryItem(Message message, {required Message? prevMessage}) {
292+
if (prevMessage == null || !haveSameRecipient(prevMessage, message)) {
297293
items.add(MessageListRecipientHeaderItem(message));
298-
canShareSender = false;
294+
return true;
299295
} else {
300296
assert(items.last is MessageListMessageItem);
301297
final prevMessageItem = items.last as MessageListMessageItem;
302-
assert(identical(prevMessageItem.message, messages[index - 1]));
298+
assert(identical(prevMessageItem.message, prevMessage));
303299
assert(prevMessageItem.isLastInBlock);
304300
prevMessageItem.isLastInBlock = false;
305301

306302
if (!messagesSameDay(prevMessageItem.message, message)) {
307303
items.add(MessageListDateSeparatorItem(message));
308-
canShareSender = false;
304+
return true;
309305
} else {
310-
canShareSender = (prevMessageItem.message.senderId == message.senderId);
306+
return false;
311307
}
312308
}
309+
}
310+
311+
/// Append to [items] based on the index-th message and its content.
312+
///
313+
/// The previous messages in the list must already have been processed.
314+
/// This message must already have been parsed and reflected in [contents].
315+
void _processMessage(int index) {
316+
final prevMessage = index == 0 ? null : messages[index - 1];
317+
final message = messages[index];
318+
final content = contents[index];
319+
320+
final appended = _maybeAppendAuxillaryItem(message, prevMessage: prevMessage);
313321
items.add(MessageListMessageItem(message, content,
314-
showSender: !canShareSender, isLastInBlock: true));
322+
showSender: appended || prevMessage?.senderId != message.senderId,
323+
isLastInBlock: true));
315324
}
316325

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

0 commit comments

Comments
 (0)