aboutsummaryrefslogtreecommitdiff
path: root/lib/syncdata.h
diff options
context:
space:
mode:
authorKitsune Ral <Kitsune-Ral@users.sf.net>2018-12-14 23:32:16 +0900
committerGitHub <noreply@github.com>2018-12-14 23:32:16 +0900
commitfcc8d2ca615fce6e42bf1cf6585d60f94a2db926 (patch)
treeb0dd17b632a5c5775f2221fd0b53b21a8c02ce58 /lib/syncdata.h
parent50571a92b4e9f634c4daf546222fa082120db6c7 (diff)
parent12a0b95fdcfea15cd0ef313aec8868656629b986 (diff)
downloadlibquotient-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.h32
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: