diff options
author | Kitsune Ral <Kitsune-Ral@users.sf.net> | 2018-12-14 23:32:16 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-12-14 23:32:16 +0900 |
commit | fcc8d2ca615fce6e42bf1cf6585d60f94a2db926 (patch) | |
tree | b0dd17b632a5c5775f2221fd0b53b21a8c02ce58 /lib/syncdata.h | |
parent | 50571a92b4e9f634c4daf546222fa082120db6c7 (diff) | |
parent | 12a0b95fdcfea15cd0ef313aec8868656629b986 (diff) | |
download | libquotient-fcc8d2ca615fce6e42bf1cf6585d60f94a2db926.tar.gz libquotient-fcc8d2ca615fce6e42bf1cf6585d60f94a2db926.zip |
Merge pull request #263 from QMatrixClient/kitsune-lazy-loading
Lazy loading members
Diffstat (limited to 'lib/syncdata.h')
-rw-r--r-- | lib/syncdata.h | 32 |
1 files changed, 31 insertions, 1 deletions
diff --git a/lib/syncdata.h b/lib/syncdata.h index aa8948bc..8694626e 100644 --- a/lib/syncdata.h +++ b/lib/syncdata.h @@ -22,11 +22,41 @@ #include "events/stateevent.h" namespace QMatrixClient { + /// Room summary, as defined in MSC688 + /** + * Every member of this structure is an Omittable; as per the MSC, only + * changed values are sent from the server so if nothing is in the payload + * the respective member will be omitted. In particular, `heroes.omitted()` + * means that nothing has come from the server; heroes.value().isEmpty() + * means a peculiar case of a room with the only member - the current user. + */ + struct RoomSummary + { + Omittable<int> joinedMemberCount; + Omittable<int> invitedMemberCount; + Omittable<QStringList> heroes; //< mxids of users to take part in the room name + + bool isEmpty() const; + /// Merge the contents of another RoomSummary object into this one + /// \return true, if the current object has changed; false otherwise + bool merge(const RoomSummary& other); + + friend QDebug operator<<(QDebug dbg, const RoomSummary& rs); + }; + + template <> + struct JsonObjectConverter<RoomSummary> + { + static void dumpTo(QJsonObject& jo, const RoomSummary& rs); + static void fillFrom(const QJsonObject& jo, RoomSummary& rs); + }; + class SyncRoomData { public: QString roomId; JoinState joinState; + RoomSummary summary; StateEvents state; RoomEvents timeline; Events ephemeral; @@ -70,7 +100,7 @@ namespace QMatrixClient { QStringList unresolvedRooms() const { return unresolvedRoomIds; } - static std::pair<int, int> cacheVersion() { return { 9, 0 }; } + static std::pair<int, int> cacheVersion() { return { 10, 0 }; } static QString fileNameForRoom(QString roomId); private: |