Skip to content

Commit 2566347

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 b86ce65 commit 2566347

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

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

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

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

0 commit comments

Comments
 (0)