if (a.IsPinned != b.IsPinned)
return a.IsPinned ? -1 : 1;
- // First, sort by unread. Any chat with unread messages appears first. We just sort based on unread
- // status, not number of unread messages, so that more recent unread messages take priority.
+ // First, sort by unread. Any chat with unread messages appears first.
var aUnread = ach.Unread > 0;
var bUnread = bch.Unread > 0;
if (aUnread != bUnread)
return aUnread ? -1 : 1;
+ // Sort by recent messages during the current round.
+ var aRecent = a.ActiveThisRound && ach.LastMessage != DateTime.MinValue;
+ var bRecent = b.ActiveThisRound && bch.LastMessage != DateTime.MinValue;
+ if (aRecent != bRecent)
+ return aRecent ? -1 : 1;
+
// Next, sort by connection status. Any disconnected players are grouped towards the end.
if (a.Connected != b.Connected)
return a.Connected ? -1 : 1;