Skip to content

Commit 999b089

Browse files
rajveermalviyagnprice
authored andcommitted
msglist: Separate messages after 10-min gap, with a sender row
Fixes: #1773
1 parent 3dc2669 commit 999b089

File tree

2 files changed

+14
-2
lines changed

2 files changed

+14
-2
lines changed

lib/model/message_list.dart

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -459,8 +459,10 @@ mixin _MessageSequence {
459459
if (!messagesSameDay(prevMessageItem.message, message)) {
460460
items.add(MessageListDateSeparatorItem(message));
461461
canShareSender = false;
462+
} else if (prevMessageItem.message.senderId == message.senderId) {
463+
canShareSender = messagesCloseInTime(prevMessage, message);
462464
} else {
463-
canShareSender = prevMessageItem.message.senderId == message.senderId;
465+
canShareSender = false;
464466
}
465467
}
466468
final item = buildItem(canShareSender);
@@ -568,6 +570,12 @@ bool messagesSameDay(MessageBase prevMessage, MessageBase message) {
568570
return true;
569571
}
570572

573+
@visibleForTesting
574+
bool messagesCloseInTime(MessageBase prevMessage, MessageBase message) {
575+
final diffSeconds = (message.timestamp - prevMessage.timestamp).abs();
576+
return diffSeconds <= 10 * 60;
577+
}
578+
571579
bool _sameDay(DateTime date1, DateTime date2) {
572580
if (date1.year != date2.year) return false;
573581
if (date1.month != date2.month) return false;

test/model/message_list_test.dart

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2946,6 +2946,8 @@ void main() {
29462946
// whether the sender should be shown, but the difference between
29472947
// fetchInitial and handleMessageEvent etc. doesn't matter.
29482948

2949+
// TODO(#1825) test that messagesCloseInTime gets used
2950+
29492951
final now = clock.now();
29502952
final t1 = eg.utcTimestamp(now.subtract(Duration(days: 1)));
29512953
final t2 = eg.utcTimestamp(now);
@@ -3118,6 +3120,8 @@ void main() {
31183120
}
31193121
}
31203122
});
3123+
3124+
// TODO(#1825) test messagesCloseInTime
31213125
}
31223126

31233127
MessageListView? _lastModel;
@@ -3244,7 +3248,7 @@ void checkInvariants(MessageListView model) {
32443248
.message.identicalTo(model.outboxMessages[j-model.messages.length]);
32453249
}
32463250
check(model.items[i++]).isA<MessageListMessageBaseItem>()
3247-
..showSender.equals(
3251+
..showSender.equals( // TODO(#1825) adjust to reflect messagesCloseInTime
32483252
forcedShowSender || allMessages[j].senderId != allMessages[j-1].senderId)
32493253
..isLastInBlock.equals(
32503254
i == model.items.length || switch (model.items[i]) {

0 commit comments

Comments
 (0)