Fix joined rooms dropping to the bottom at first
1 files changed, 22 insertions, 5 deletions
diff --git a/src/Cache.cpp b/src/Cache.cpp
index aca01c1a..016ba371 100644
--- a/src/Cache.cpp
+++ b/src/Cache.cpp
@@ -1314,16 +1314,33 @@ Cache::getLastMessageInfo(lmdb::txn &txn, const std::string &room_id)
std::string timestamp, msg;
- QSettings settings;
const auto local_user = utils::localUser();
+ DescInfo fallbackDesc{};
+
auto cursor = lmdb::cursor::open(txn, db);
while (cursor.get(timestamp, msg, MDB_NEXT)) {
auto obj = json::parse(msg);
- if (obj.count("event") == 0 || !(obj["event"]["type"] == "m.room.message" ||
- obj["event"]["type"] == "m.sticker" ||
- obj["event"]["type"] == "m.room.encrypted"))
+ if (obj.count("event") == 0)
+ continue;
+
+ if (fallbackDesc.event_id.isEmpty() && obj["event"]["type"] == "m.room.member" &&
+ obj["event"]["state_key"] == local_user.toStdString() &&
+ obj["event"]["content"]["membership"] == "join") {
+ uint64_t ts = obj["event"]["origin_server_ts"];
+ auto time = QDateTime::fromMSecsSinceEpoch(ts);
+ fallbackDesc = DescInfo{QString::fromStdString(obj["event"]["event_id"]),
+ local_user,
+ tr("You joined this room"),
+ utils::descriptiveTime(time),
+ ts,
+ time};
+ }
+
+ if (!(obj["event"]["type"] == "m.room.message" ||
+ obj["event"]["type"] == "m.sticker" ||
+ obj["event"]["type"] == "m.room.encrypted"))
continue;
mtx::events::collections::TimelineEvent event;
@@ -1335,7 +1352,7 @@ Cache::getLastMessageInfo(lmdb::txn &txn, const std::string &room_id)
}
cursor.close();
- return DescInfo{};
+ return fallbackDesc;
}
std::map<QString, bool>
|