mirror of
https://github.com/Nheko-Reborn/nheko.git
synced 2024-12-01 22:58:49 +03:00
Strip whitespace from room names for QuickSwitcher
This commit is contained in:
parent
7a16e05b14
commit
6d0bc0c05e
3 changed files with 27 additions and 46 deletions
|
@ -136,7 +136,7 @@ public:
|
||||||
void populateMembers();
|
void populateMembers();
|
||||||
std::vector<std::string> joinedRooms();
|
std::vector<std::string> joinedRooms();
|
||||||
|
|
||||||
QMap<QString, RoomInfo> roomInfo();
|
QMap<QString, RoomInfo> roomInfo(bool withInvites = true);
|
||||||
|
|
||||||
//! Calculate & return the name of the room.
|
//! Calculate & return the name of the room.
|
||||||
QString getRoomName(lmdb::txn &txn, lmdb::dbi &statesdb, lmdb::dbi &membersdb);
|
QString getRoomName(lmdb::txn &txn, lmdb::dbi &statesdb, lmdb::dbi &membersdb);
|
||||||
|
@ -331,9 +331,6 @@ private:
|
||||||
void saveInvites(lmdb::txn &txn,
|
void saveInvites(lmdb::txn &txn,
|
||||||
const std::map<std::string, mtx::responses::InvitedRoom> &rooms);
|
const std::map<std::string, mtx::responses::InvitedRoom> &rooms);
|
||||||
|
|
||||||
//! Remove any saved invites that are not found in the input.
|
|
||||||
void removeStaleInvites(lmdb::txn &txn, const std::map<std::string, bool> &curr);
|
|
||||||
|
|
||||||
//! Sends signals for the rooms that are removed.
|
//! Sends signals for the rooms that are removed.
|
||||||
void removeLeftRooms(lmdb::txn &txn,
|
void removeLeftRooms(lmdb::txn &txn,
|
||||||
const std::map<std::string, mtx::responses::LeftRoom> &rooms)
|
const std::map<std::string, mtx::responses::LeftRoom> &rooms)
|
||||||
|
|
47
src/Cache.cc
47
src/Cache.cc
|
@ -390,31 +390,11 @@ Cache::saveState(const mtx::responses::Sync &res)
|
||||||
|
|
||||||
saveInvites(txn, res.rooms.invite);
|
saveInvites(txn, res.rooms.invite);
|
||||||
|
|
||||||
std::map<std::string, bool> invites;
|
|
||||||
for (const auto &invite : res.rooms.invite)
|
|
||||||
invites.emplace(std::move(invite.first), true);
|
|
||||||
|
|
||||||
// removeStaleInvites(txn, invites);
|
|
||||||
|
|
||||||
removeLeftRooms(txn, res.rooms.leave);
|
removeLeftRooms(txn, res.rooms.leave);
|
||||||
|
|
||||||
txn.commit();
|
txn.commit();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
Cache::removeStaleInvites(lmdb::txn &txn, const std::map<std::string, bool> &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
|
void
|
||||||
Cache::saveInvites(lmdb::txn &txn, const std::map<std::string, mtx::responses::InvitedRoom> &rooms)
|
Cache::saveInvites(lmdb::txn &txn, const std::map<std::string, mtx::responses::InvitedRoom> &rooms)
|
||||||
{
|
{
|
||||||
|
@ -554,32 +534,33 @@ Cache::getRoomInfo(const std::vector<std::string> &rooms)
|
||||||
}
|
}
|
||||||
|
|
||||||
QMap<QString, RoomInfo>
|
QMap<QString, RoomInfo>
|
||||||
Cache::roomInfo()
|
Cache::roomInfo(bool withInvites)
|
||||||
{
|
{
|
||||||
QMap<QString, RoomInfo> result;
|
QMap<QString, RoomInfo> result;
|
||||||
|
|
||||||
auto txn = lmdb::txn::begin(env_, nullptr, MDB_RDONLY);
|
auto txn = lmdb::txn::begin(env_, nullptr, MDB_RDONLY);
|
||||||
auto roomsCursor = lmdb::cursor::open(txn, roomsDb_);
|
|
||||||
auto invitesCursor = lmdb::cursor::open(txn, invitesDb_);
|
|
||||||
|
|
||||||
std::string room_id;
|
std::string room_id;
|
||||||
std::string room_data;
|
std::string room_data;
|
||||||
|
|
||||||
// Gather info about the joined rooms.
|
// Gather info about the joined rooms.
|
||||||
|
auto roomsCursor = lmdb::cursor::open(txn, roomsDb_);
|
||||||
while (roomsCursor.get(room_id, room_data, MDB_NEXT)) {
|
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));
|
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();
|
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();
|
txn.commit();
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
|
|
@ -624,6 +624,11 @@ ChatPage::updateOwnCommunitiesInfo(const QList<QString> &own_communities)
|
||||||
void
|
void
|
||||||
ChatPage::changeTopRoomInfo(const QString &room_id)
|
ChatPage::changeTopRoomInfo(const QString &room_id)
|
||||||
{
|
{
|
||||||
|
if (room_id.isEmpty()) {
|
||||||
|
qWarning() << "can't switch to empty room_id";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
auto room_info = cache_->getRoomInfo({room_id.toStdString()});
|
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());
|
top_bar_->updateRoomAvatar(roomAvatars_[room_id].toImage());
|
||||||
else
|
else
|
||||||
top_bar_->updateRoomAvatarFromName(name);
|
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
|
void
|
||||||
|
@ -712,12 +716,11 @@ ChatPage::showQuickSwitcher()
|
||||||
quickSwitcherModal_->setColor(QColor(30, 30, 30, 170));
|
quickSwitcherModal_->setColor(QColor(30, 30, 30, 170));
|
||||||
}
|
}
|
||||||
|
|
||||||
std::map<QString, QString> rooms;
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
auto info = cache_->roomInfo();
|
std::map<QString, QString> rooms;
|
||||||
|
auto info = cache_->roomInfo(false);
|
||||||
for (auto it = info.begin(); it != info.end(); ++it)
|
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);
|
quickSwitcher_->setRoomList(rooms);
|
||||||
quickSwitcherModal_->show();
|
quickSwitcherModal_->show();
|
||||||
} catch (const lmdb::error &e) {
|
} catch (const lmdb::error &e) {
|
||||||
|
|
Loading…
Reference in a new issue