Skip to content

Commit d569b58

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 eed5bf0 commit d569b58

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
@@ -284,36 +284,45 @@ mixin _MessageSequence {
284284
_reprocessAll();
285285
}
286286

287-
/// Append to [items] based on the index-th message and its content.
287+
/// Append to [items] an auxillary item like a date separator and update
288+
/// properties of the previous message item, if necessary.
288289
///
289-
/// The previous messages in the list must already have been processed.
290-
/// This message must already have been parsed and reflected in [contents].
291-
void _processMessage(int index) {
292-
// This will get more complicated to handle the ways that messages interact
293-
// with the display of neighboring messages: sender headings #175
294-
// and date separators #173.
295-
final message = messages[index];
296-
final content = contents[index];
297-
bool canShareSender;
298-
if (index == 0 || !haveSameRecipient(messages[index - 1], message)) {
290+
/// Returns whether an item has been appended or not.
291+
///
292+
/// The caller must append a [MessageListMessageItem] after this.
293+
bool _maybeAppendAuxillaryItem(Message message, {required Message? prevMessage}) {
294+
if (prevMessage == null || !haveSameRecipient(prevMessage, message)) {
299295
items.add(MessageListRecipientHeaderItem(message));
300-
canShareSender = false;
296+
return true;
301297
} else {
302298
assert(items.last is MessageListMessageItem);
303299
final prevMessageItem = items.last as MessageListMessageItem;
304-
assert(identical(prevMessageItem.message, messages[index - 1]));
300+
assert(identical(prevMessageItem.message, prevMessage));
305301
assert(prevMessageItem.isLastInBlock);
306302
prevMessageItem.isLastInBlock = false;
307303

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

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

0 commit comments

Comments
 (0)