summary refs log tree commit diff
path: root/src/ChatPage.cc
diff options
context:
space:
mode:
authorKonstantinos Sideris <sideris.konstantin@gmail.com>2017-05-26 21:34:16 +0300
committerKonstantinos Sideris <sideris.konstantin@gmail.com>2017-05-26 21:34:16 +0300
commit0cd9e3b1e56e991dd357ff4e98c4aba108c25e3f (patch)
tree7ae3eb41869da32eea14791981b18e80eeedfc68 /src/ChatPage.cc
parentAdd custom scrollbar on the timeline (diff)
downloadnheko-0cd9e3b1e56e991dd357ff4e98c4aba108c25e3f.tar.xz
Resolve name and avatar on 1-on-1 rooms
Diffstat (limited to 'src/ChatPage.cc')
-rw-r--r--src/ChatPage.cc43
1 files changed, 30 insertions, 13 deletions
diff --git a/src/ChatPage.cc b/src/ChatPage.cc

index b5012818..d318d086 100644 --- a/src/ChatPage.cc +++ b/src/ChatPage.cc
@@ -220,6 +220,17 @@ void ChatPage::syncFailed(const QString &msg) sync_timer_->start(sync_interval_ * 5); } +// TODO: Should be moved in another class that manages this global list. +void ChatPage::updateDisplayNames(const RoomState &state) +{ + for (const auto member : state.memberships) { + auto displayName = member.content().displayName(); + + if (!displayName.isEmpty()) + TimelineViewManager::DISPLAY_NAMES.insert(member.stateKey(), displayName); + } +} + void ChatPage::syncCompleted(const SyncResponse &response) { client_->setNextBatchToken(response.nextBatch()); @@ -234,8 +245,16 @@ void ChatPage::syncCompleted(const SyncResponse &response) updateRoomState(room_state, it.value().state().events()); updateRoomState(room_state, it.value().timeline().events()); + updateDisplayNames(room_state); - state_manager_.insert(it.key(), room_state); + if (state_manager_.contains(it.key())) { + // TODO: Use pointers instead of copying. + auto oldState = state_manager_[it.key()]; + oldState.update(room_state); + state_manager_.insert(it.key(), oldState); + } else { + qWarning() << "New rooms cannot be added after initial sync, yet."; + } if (it.key() == current_room_) changeTopRoomInfo(it.key()); @@ -260,6 +279,12 @@ void ChatPage::initialSyncCompleted(const SyncResponse &response) updateRoomState(room_state, it.value().state().events()); updateRoomState(room_state, it.value().timeline().events()); + room_state.removeLeaveMemberships(); + room_state.resolveName(); + room_state.resolveAvatar(); + + updateDisplayNames(room_state); + state_manager_.insert(it.key(), room_state); } @@ -298,13 +323,13 @@ void ChatPage::changeTopRoomInfo(const QString &room_id) auto state = state_manager_[room_id]; - top_bar_->updateRoomName(state.resolveName()); - top_bar_->updateRoomTopic(state.resolveTopic()); + top_bar_->updateRoomName(state.getName()); + top_bar_->updateRoomTopic(state.getTopic()); if (room_avatars_.contains(room_id)) top_bar_->updateRoomAvatar(room_avatars_.value(room_id).toImage()); else - top_bar_->updateRoomAvatarFromName(state.resolveName()); + top_bar_->updateRoomAvatarFromName(state.getName()); current_room_ = room_id; } @@ -383,15 +408,7 @@ void ChatPage::updateRoomState(RoomState &room_state, const QJsonArray &events) events::StateEvent<events::MemberEventContent> member; member.deserialize(event); - auto display_name = member.content().displayName(); - - if (display_name.isEmpty()) - display_name = member.stateKey(); - - auto current_name = TimelineViewManager::DISPLAY_NAMES.value(member.stateKey()); - - if (current_name.isEmpty() || current_name == member.stateKey()) - TimelineViewManager::DISPLAY_NAMES.insert(member.stateKey(), display_name); + room_state.memberships.insert(member.stateKey(), member); break; }