From 6d0bc0c05ee5e8ac9146ffa4808f6a013d1c7438 Mon Sep 17 00:00:00 2001 From: Konstantinos Sideris Date: Sun, 22 Apr 2018 11:27:00 +0300 Subject: [PATCH] Strip whitespace from room names for QuickSwitcher --- include/Cache.h | 5 +---- src/Cache.cc | 47 ++++++++++++++--------------------------------- src/ChatPage.cc | 21 ++++++++++++--------- 3 files changed, 27 insertions(+), 46 deletions(-) diff --git a/include/Cache.h b/include/Cache.h index 6e54f1e9..9a151aba 100644 --- a/include/Cache.h +++ b/include/Cache.h @@ -136,7 +136,7 @@ public: void populateMembers(); std::vector joinedRooms(); - QMap roomInfo(); + QMap roomInfo(bool withInvites = true); //! Calculate & return the name of the room. QString getRoomName(lmdb::txn &txn, lmdb::dbi &statesdb, lmdb::dbi &membersdb); @@ -331,9 +331,6 @@ private: void saveInvites(lmdb::txn &txn, const std::map &rooms); - //! Remove any saved invites that are not found in the input. - void removeStaleInvites(lmdb::txn &txn, const std::map &curr); - //! Sends signals for the rooms that are removed. void removeLeftRooms(lmdb::txn &txn, const std::map &rooms) diff --git a/src/Cache.cc b/src/Cache.cc index 1155a40a..4dadff06 100644 --- a/src/Cache.cc +++ b/src/Cache.cc @@ -390,31 +390,11 @@ Cache::saveState(const mtx::responses::Sync &res) saveInvites(txn, res.rooms.invite); - std::map invites; - for (const auto &invite : res.rooms.invite) - invites.emplace(std::move(invite.first), true); - - // removeStaleInvites(txn, invites); - removeLeftRooms(txn, res.rooms.leave); txn.commit(); } -void -Cache::removeStaleInvites(lmdb::txn &txn, const std::map &curr) -{ - auto invitesCursor = lmdb::cursor::open(txn, invitesDb_); - - std::string room_id, room_data; - while (invitesCursor.get(room_id, room_data, MDB_NEXT)) { - if (curr.find(room_id) == curr.end()) - lmdb::cursor_del(invitesCursor); - } - - invitesCursor.close(); -} - void Cache::saveInvites(lmdb::txn &txn, const std::map &rooms) { @@ -554,32 +534,33 @@ Cache::getRoomInfo(const std::vector &rooms) } QMap -Cache::roomInfo() +Cache::roomInfo(bool withInvites) { QMap result; - auto txn = lmdb::txn::begin(env_, nullptr, MDB_RDONLY); - auto roomsCursor = lmdb::cursor::open(txn, roomsDb_); - auto invitesCursor = lmdb::cursor::open(txn, invitesDb_); + auto txn = lmdb::txn::begin(env_, nullptr, MDB_RDONLY); std::string room_id; std::string room_data; // Gather info about the joined rooms. + auto roomsCursor = lmdb::cursor::open(txn, roomsDb_); while (roomsCursor.get(room_id, room_data, MDB_NEXT)) { - RoomInfo tmp = json::parse(room_data); + RoomInfo tmp = json::parse(std::move(room_data)); result.insert(QString::fromStdString(std::move(room_id)), std::move(tmp)); } - - // Gather info about the invites. - while (invitesCursor.get(room_id, room_data, MDB_NEXT)) { - RoomInfo tmp = json::parse(room_data); - result.insert(QString::fromStdString(std::move(room_id)), std::move(tmp)); - } - - invitesCursor.close(); roomsCursor.close(); + if (withInvites) { + // Gather info about the invites. + auto invitesCursor = lmdb::cursor::open(txn, invitesDb_); + while (invitesCursor.get(room_id, room_data, MDB_NEXT)) { + RoomInfo tmp = json::parse(room_data); + result.insert(QString::fromStdString(std::move(room_id)), std::move(tmp)); + } + invitesCursor.close(); + } + txn.commit(); return result; diff --git a/src/ChatPage.cc b/src/ChatPage.cc index ff59471f..ae3079a3 100644 --- a/src/ChatPage.cc +++ b/src/ChatPage.cc @@ -624,6 +624,11 @@ ChatPage::updateOwnCommunitiesInfo(const QList &own_communities) void ChatPage::changeTopRoomInfo(const QString &room_id) { + if (room_id.isEmpty()) { + qWarning() << "can't switch to empty room_id"; + return; + } + try { auto room_info = cache_->getRoomInfo({room_id.toStdString()}); @@ -640,12 +645,11 @@ ChatPage::changeTopRoomInfo(const QString &room_id) top_bar_->updateRoomAvatar(roomAvatars_[room_id].toImage()); else top_bar_->updateRoomAvatarFromName(name); - } catch (const lmdb::error &e) { - qWarning() << "failed to change top bar room info" - << QString::fromStdString(e.what()); - } - current_room_ = room_id; + current_room_ = room_id; + } catch (const lmdb::error &e) { + qWarning() << "failed to change top bar room info" << e.what(); + } } void @@ -712,12 +716,11 @@ ChatPage::showQuickSwitcher() quickSwitcherModal_->setColor(QColor(30, 30, 30, 170)); } - std::map rooms; - try { - auto info = cache_->roomInfo(); + std::map rooms; + auto info = cache_->roomInfo(false); for (auto it = info.begin(); it != info.end(); ++it) - rooms.emplace(QString::fromStdString(it.value().name), it.key()); + rooms.emplace(QString::fromStdString(it.value().name).trimmed(), it.key()); quickSwitcher_->setRoomList(rooms); quickSwitcherModal_->show(); } catch (const lmdb::error &e) {