From a605e4486f4b9d90d668d6d1844ba5f0d58bbc26 Mon Sep 17 00:00:00 2001 From: Konstantinos Sideris Date: Mon, 4 Dec 2017 18:41:19 +0200 Subject: Migrate to matrix-structs for event and response parsing --- include/ChatPage.h | 71 +++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 54 insertions(+), 17 deletions(-) (limited to 'include/ChatPage.h') diff --git a/include/ChatPage.h b/include/ChatPage.h index 01f6c5d7..94c54f0b 100644 --- a/include/ChatPage.h +++ b/include/ChatPage.h @@ -24,9 +24,7 @@ #include #include -#include "MemberEventContent.h" -#include "MessageEvent.h" -#include "StateEvent.h" +#include class Cache; class MatrixClient; @@ -37,14 +35,11 @@ class RoomSettings; class RoomState; class SideBarActions; class Splitter; -class SyncResponse; class TextInputWidget; class TimelineViewManager; class TopRoomBar; class TypingDisplay; class UserInfoWidget; -class JoinedRoom; -class LeftRoom; constexpr int CONSENSUS_TIMEOUT = 1000; constexpr int SHOW_CONTENT_TIMEOUT = 3000; @@ -76,8 +71,8 @@ private slots: void updateTopBarAvatar(const QString &roomid, const QPixmap &img); void updateOwnProfileInfo(const QUrl &avatar_url, const QString &display_name); void setOwnAvatar(const QPixmap &img); - void initialSyncCompleted(const SyncResponse &response); - void syncCompleted(const SyncResponse &response); + void initialSyncCompleted(const mtx::responses::Sync &response); + void syncCompleted(const mtx::responses::Sync &response); void syncFailed(const QString &msg); void changeTopRoomInfo(const QString &room_id); void logout(); @@ -87,26 +82,34 @@ private slots: private: using UserID = QString; using RoomStates = QMap; - using JoinedRooms = QMap; - using LeftRooms = QMap; - using Membership = matrix::events::StateEvent; - using Memberships = QMap; + using Membership = mtx::events::StateEvent; + using Memberships = std::map; + + using JoinedRooms = std::map; + using LeftRooms = std::map; void removeLeftRooms(const LeftRooms &rooms); void updateJoinedRooms(const JoinedRooms &rooms); - Memberships getMemberships(const QJsonArray &events) const; RoomStates generateMembershipDifference(const JoinedRooms &rooms, const RoomStates &states) const; - void updateTypingUsers(const QString &roomid, const QList &user_ids); - void updateUserMetadata(const QJsonArray &events); - void updateUserDisplayName(const Membership &event); - void updateUserAvatarUrl(const Membership &event); + void updateTypingUsers(const QString &roomid, const std::vector &user_ids); + + using MemberEvent = mtx::events::StateEvent; + void updateUserDisplayName(const MemberEvent &event); + void updateUserAvatarUrl(const MemberEvent &event); + void loadStateFromCache(); void deleteConfigs(); void resetUI(); + template + Memberships getMemberships(const std::vector &events) const; + + template + void updateUserMetadata(const std::vector &collection); + QHBoxLayout *topLayout_; Splitter *splitter; @@ -153,3 +156,37 @@ private: // return to the login page. int initialSyncFailures = 0; }; + +template +void +ChatPage::updateUserMetadata(const std::vector &collection) +{ + using Member = mtx::events::StateEvent; + + for (auto &event : collection) { + if (mpark::holds_alternative(event)) { + auto member = mpark::get(event); + + updateUserAvatarUrl(member); + updateUserDisplayName(member); + } + } +} + +template +std::map> +ChatPage::getMemberships(const std::vector &collection) const +{ + std::map> memberships; + + using Member = mtx::events::StateEvent; + + for (auto &event : collection) { + if (mpark::holds_alternative(event)) { + auto member = mpark::get(event); + memberships.emplace(member.state_key, member); + } + } + + return memberships; +} -- cgit 1.5.1