diff options
author | Nicolas Werner <nicolas.werner@hotmail.de> | 2023-05-06 19:30:29 +0200 |
---|---|---|
committer | Nicolas Werner <nicolas.werner@hotmail.de> | 2023-05-06 19:30:29 +0200 |
commit | 7dd333947711b9ebb54460066a25b07d155fa012 (patch) | |
tree | e7879c87bad2f2d23349de37a5c2a722b685bf1e /src/Cache.cpp | |
parent | Allow picking multiple files to upload (diff) | |
download | nheko-7dd333947711b9ebb54460066a25b07d155fa012.tar.xz |
Sort rooms in completer by 'activity' and make tombstoned rooms italic
Diffstat (limited to 'src/Cache.cpp')
-rw-r--r-- | src/Cache.cpp | 44 |
1 files changed, 38 insertions, 6 deletions
diff --git a/src/Cache.cpp b/src/Cache.cpp index b0b50004..1681f02c 100644 --- a/src/Cache.cpp +++ b/src/Cache.cpp @@ -1792,7 +1792,9 @@ Cache::updateState(const std::string &room, const mtx::responses::StateEvents &s updatedInfo.topic = getRoomTopic(txn, statesdb).toStdString(); updatedInfo.avatar_url = getRoomAvatarUrl(txn, statesdb, membersdb).toStdString(); updatedInfo.version = getRoomVersion(txn, statesdb).toStdString(); - updatedInfo.is_space = getRoomIsSpace(txn, statesdb); + + updatedInfo.is_space = getRoomIsSpace(txn, statesdb); + updatedInfo.is_tombstoned = getRoomIsTombstoned(txn, statesdb); roomsDb_.put(txn, room, nlohmann::json(updatedInfo).dump()); updateSpaces(txn, {room}, {room}); @@ -2558,9 +2560,13 @@ Cache::roomNamesAndAliases() alias = aliases->content.alias; } - result.push_back(RoomNameAlias{.id = std::move(room_id_str), - .name = std::move(info.name), - .alias = std::move(alias)}); + result.push_back(RoomNameAlias{ + .id = std::move(room_id_str), + .name = std::move(info.name), + .alias = std::move(alias), + .recent_activity = info.approximate_last_modification_ts, + .is_tombstoned = info.is_tombstoned, + }); } catch (std::exception &e) { nhlog::db()->warn("Failed to add room {} to result: {}", room_id, e.what()); } @@ -3091,6 +3097,28 @@ Cache::getRoomIsSpace(lmdb::txn &txn, lmdb::dbi &statesdb) return false; } +bool +Cache::getRoomIsTombstoned(lmdb::txn &txn, lmdb::dbi &statesdb) +{ + using namespace mtx::events; + using namespace mtx::events::state; + + std::string_view event; + bool res = statesdb.get(txn, to_string(mtx::events::EventType::RoomCreate), event); + + if (res) { + try { + StateEvent<Tombstone> msg = nlohmann::json::parse(event).get<StateEvent<Tombstone>>(); + + return true; + } catch (const nlohmann::json::exception &e) { + nhlog::db()->warn("failed to parse m.room.tombstone event: {}", e.what()); + } + } + + return false; +} + QString Cache::getInviteRoomName(lmdb::txn &txn, lmdb::dbi &statesdb, lmdb::dbi &membersdb) { @@ -5138,6 +5166,7 @@ to_json(nlohmann::json &j, const RoomInfo &info) j["version"] = info.version; j["is_invite"] = info.is_invite; j["is_space"] = info.is_space; + j["tombst"] = info.is_tombstoned; j["join_rule"] = info.join_rule; j["guest_access"] = info.guest_access; @@ -5161,8 +5190,11 @@ from_json(const nlohmann::json &j, RoomInfo &info) info.avatar_url = j.at("avatar_url").get<std::string>(); info.version = j.value( "version", QCoreApplication::translate("RoomInfo", "no version stored").toStdString()); - info.is_invite = j.at("is_invite").get<bool>(); - info.is_space = j.value("is_space", false); + + info.is_invite = j.at("is_invite").get<bool>(); + info.is_space = j.value("is_space", false); + info.is_tombstoned = j.value("tombst", false); + info.join_rule = j.at("join_rule").get<mtx::events::state::JoinRule>(); info.guest_access = j.at("guest_access").get<bool>(); |