From ba25771c08755c8478eace29d3123bdfc7af1385 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Fri, 13 Dec 2019 20:49:27 +0100 Subject: [PATCH] Make invites always stick to the top This also removes an ugly hack, that was needed before. --- src/RoomInfoListItem.cpp | 12 ------------ src/RoomList.cpp | 9 ++++++++- 2 files changed, 8 insertions(+), 13 deletions(-) diff --git a/src/RoomInfoListItem.cpp b/src/RoomInfoListItem.cpp index 8bebb0f5..77de8d5a 100644 --- a/src/RoomInfoListItem.cpp +++ b/src/RoomInfoListItem.cpp @@ -107,18 +107,6 @@ RoomInfoListItem::RoomInfoListItem(QString room_id, RoomInfo info, QWidget *pare , unreadHighlightedMsgCount_(0) { init(parent); - - QString emptyEventId; - - // HACK - // We use fake message info with an old date to pin - // the invite events to the top. - // - // State events in invited rooms don't contain timestamp info, - // so we can't use them for sorting. - if (roomType_ == RoomType::Invited) - lastMsgInfo_ = { - emptyEventId, "-", "-", "-", QDateTime::currentDateTime().addYears(10)}; } void diff --git a/src/RoomList.cpp b/src/RoomList.cpp index c5e05621..dfd4eff8 100644 --- a/src/RoomList.cpp +++ b/src/RoomList.cpp @@ -15,6 +15,8 @@ * along with this program. If not, see . */ +#include + #include #include #include @@ -191,6 +193,9 @@ RoomList::sync(const std::map &info) { for (const auto &room : info) updateRoom(room.first, room.second); + + if (!info.empty()) + sortRoomsByLastMessage(); } void @@ -270,7 +275,9 @@ RoomList::sortRoomsByLastMessage() continue; // Not a room message. - if (room->lastMessageInfo().userid.isEmpty()) + if (room->isInvite()) + times.emplace(std::numeric_limits::max(), room); + else if (room->lastMessageInfo().userid.isEmpty()) times.emplace(0, room); else times.emplace(room->lastMessageInfo().datetime.toMSecsSinceEpoch(), room);