Skip to content

Commit

Permalink
Track invites so they can be removed outside of nheko
Browse files Browse the repository at this point in the history
fixes mujx#213
  • Loading branch information
mujx committed Mar 26, 2018
1 parent 7364a00 commit 56cc8ec
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 3 deletions.
11 changes: 9 additions & 2 deletions include/ChatPage.h
Original file line number Diff line number Diff line change
Expand Up @@ -110,11 +110,17 @@ private slots:
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,
Expand Down Expand Up @@ -181,6 +187,7 @@ private slots:

RoomStates roomStates_;
std::map<QString, QSharedPointer<RoomSettings>> roomSettings_;
std::map<QString, bool> roomInvites_;

std::map<QString, QSharedPointer<Community>> communities_;

Expand Down
16 changes: 15 additions & 1 deletion src/ChatPage.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand Down Expand Up @@ -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();
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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
Expand All @@ -789,6 +796,7 @@ ChatPage::removeInvite(const QString &room_id)
}

room_list_->removeRoom(room_id, room_id == current_room_);
roomInvites_.erase(room_id);
}

void
Expand Down Expand Up @@ -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);
}
}

Expand All @@ -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);
Expand Down

0 comments on commit 56cc8ec

Please sign in to comment.