Make invites always stick to the top

This also removes an ugly hack, that was needed before.
pull/102/head
Nicolas Werner 5 years ago
parent a73ed771fa
commit ba25771c08
  1. 12
      src/RoomInfoListItem.cpp
  2. 9
      src/RoomList.cpp

@ -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

@ -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);

Loading…
Cancel
Save