summary refs log tree commit diff
diff options
context:
space:
mode:
authorKonstantinos Sideris <sideris.konstantin@gmail.com>2018-03-26 21:39:00 +0300
committerKonstantinos Sideris <sideris.konstantin@gmail.com>2018-03-26 21:39:00 +0300
commit15931fc3222beda9555fe996469b0f2059ee328b (patch)
treeae4cd0eb2eef56a9c12c11d9b798ce976bf96970
parentSimplify variant usage (diff)
downloadnheko-15931fc3222beda9555fe996469b0f2059ee328b.tar.xz
Track invites so they can be removed outside of nheko
fixes #213
-rw-r--r--include/ChatPage.h11
-rw-r--r--src/ChatPage.cc16
2 files changed, 24 insertions, 3 deletions
diff --git a/include/ChatPage.h b/include/ChatPage.h

index 2fa8779e..25cd8615 100644 --- a/include/ChatPage.h +++ b/include/ChatPage.h
@@ -110,11 +110,17 @@ private: using Membership = mtx::events::StateEvent<mtx::events::state::Member>; using Memberships = std::map<std::string, Membership>; - using JoinedRooms = std::map<std::string, mtx::responses::JoinedRoom>; - using LeftRooms = std::map<std::string, mtx::responses::LeftRoom>; + using JoinedRooms = std::map<std::string, mtx::responses::JoinedRoom>; + using LeftRooms = std::map<std::string, mtx::responses::LeftRoom>; + using InvitedRooms = std::map<std::string, mtx::responses::InvitedRoom>; void removeLeftRooms(const LeftRooms &rooms); void updateJoinedRooms(const JoinedRooms &rooms); + void trackInvites(const InvitedRooms &rooms) + { + for (const auto &invite : rooms) + roomInvites_[QString::fromStdString(invite.first)] = true; + } std::map<QString, QSharedPointer<RoomState>> generateMembershipDifference( const JoinedRooms &rooms, @@ -181,6 +187,7 @@ private: RoomStates roomStates_; std::map<QString, QSharedPointer<RoomSettings>> roomSettings_; + std::map<QString, bool> roomInvites_; std::map<QString, QSharedPointer<Community>> communities_; diff --git a/src/ChatPage.cc b/src/ChatPage.cc
index c8cceabf..8b8b4438 100644 --- a/src/ChatPage.cc +++ b/src/ChatPage.cc
@@ -493,6 +493,7 @@ ChatPage::syncCompleted(const mtx::responses::Sync &response) room_list_->sync(roomStates_, roomSettings_); room_list_->syncInvites(response.rooms.invite); + trackInvites(response.rooms.invite); view_manager_->sync(response.rooms); @@ -549,6 +550,7 @@ ChatPage::initialSyncCompleted(const mtx::responses::Sync &response) // Initialize room list. room_list_->setInitialRooms(roomSettings_, roomStates_); room_list_->syncInvites(response.rooms.invite); + trackInvites(response.rooms.invite); client_->setNextBatchToken(QString::fromStdString(response.next_batch)); client_->sync(); @@ -687,7 +689,10 @@ ChatPage::loadStateFromCache() // Initialize room list from the restored state and settings. room_list_->setInitialRooms(roomSettings_, roomStates_); - room_list_->syncInvites(cache_->invites()); + + const auto invites = cache_->invites(); + room_list_->syncInvites(invites); + trackInvites(invites); // Check periodically if the timelines have been loaded. consensusTimer_->start(CONSENSUS_TIMEOUT); @@ -773,7 +778,9 @@ ChatPage::removeRoom(const QString &room_id) cache_->unmount(); cache_->deleteData(); } + room_list_->removeRoom(room_id, room_id == current_room_); + roomInvites_.erase(room_id); } void @@ -789,6 +796,7 @@ ChatPage::removeInvite(const QString &room_id) } room_list_->removeRoom(room_id, room_id == current_room_); + roomInvites_.erase(room_id); } void @@ -854,6 +862,9 @@ ChatPage::removeLeftRooms(const std::map<std::string, mtx::responses::LeftRoom> if (roomStates_.find(room_id) != roomStates_.end()) removeRoom(room_id); + + if (roomInvites_.find(room_id) != roomInvites_.end()) + removeInvite(room_id); } } @@ -863,6 +874,9 @@ ChatPage::updateJoinedRooms(const std::map<std::string, mtx::responses::JoinedRo for (auto it = rooms.cbegin(); it != rooms.cend(); ++it) { const auto roomid = QString::fromStdString(it->first); + if (roomInvites_.find(roomid) != roomInvites_.end()) + removeInvite(roomid); + updateTypingUsers(roomid, it->second.ephemeral.typing); updateRoomNotificationCount(roomid, it->second.unread_notifications.notification_count);