Make invites always stick to the top

This also removes an ugly hack, that was needed before.
This commit is contained in:
Nicolas Werner 2019-12-13 20:49:27 +01:00
parent a73ed771fa
commit ba25771c08
2 changed files with 8 additions and 13 deletions

View file

@ -107,18 +107,6 @@ RoomInfoListItem::RoomInfoListItem(QString room_id, RoomInfo info, QWidget *pare
, unreadHighlightedMsgCount_(0) , unreadHighlightedMsgCount_(0)
{ {
init(parent); 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 void

View file

@ -15,6 +15,8 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
#include <limits>
#include <QApplication> #include <QApplication>
#include <QBuffer> #include <QBuffer>
#include <QObject> #include <QObject>
@ -191,6 +193,9 @@ RoomList::sync(const std::map<QString, RoomInfo> &info)
{ {
for (const auto &room : info) for (const auto &room : info)
updateRoom(room.first, room.second); updateRoom(room.first, room.second);
if (!info.empty())
sortRoomsByLastMessage();
} }
void void
@ -270,7 +275,9 @@ RoomList::sortRoomsByLastMessage()
continue; continue;
// Not a room message. // Not a room message.
if (room->lastMessageInfo().userid.isEmpty()) if (room->isInvite())
times.emplace(std::numeric_limits<uint64_t>::max(), room);
else if (room->lastMessageInfo().userid.isEmpty())
times.emplace(0, room); times.emplace(0, room);
else else
times.emplace(room->lastMessageInfo().datetime.toMSecsSinceEpoch(), room); times.emplace(room->lastMessageInfo().datetime.toMSecsSinceEpoch(), room);