diff options
author | Kitsune Ral <Kitsune-Ral@users.sf.net> | 2018-11-23 15:38:59 +0900 |
---|---|---|
committer | Kitsune Ral <Kitsune-Ral@users.sf.net> | 2018-11-23 15:55:16 +0900 |
commit | 49ad563550ba9d2d03fc7a519ccb857a6d08791c (patch) | |
tree | c4beac95c51d29c78ca4826898a0d85344769268 | |
parent | 64799eaf667840c7f81d80810508d948f64f97d6 (diff) | |
download | libquotient-49ad563550ba9d2d03fc7a519ccb857a6d08791c.tar.gz libquotient-49ad563550ba9d2d03fc7a519ccb857a6d08791c.zip |
Room/Connection: don't save the just loaded room cache
-rw-r--r-- | lib/connection.cpp | 6 | ||||
-rw-r--r-- | lib/connection.h | 2 | ||||
-rw-r--r-- | lib/room.cpp | 5 | ||||
-rw-r--r-- | lib/room.h | 17 |
4 files changed, 16 insertions, 14 deletions
diff --git a/lib/connection.cpp b/lib/connection.cpp index 53835a80..9372acd5 100644 --- a/lib/connection.cpp +++ b/lib/connection.cpp @@ -316,7 +316,7 @@ void Connection::sync(int timeout) }); } -void Connection::onSyncSuccess(SyncData &&data) { +void Connection::onSyncSuccess(SyncData &&data, bool fromCache) { d->data->setLastEvent(data.nextBatch()); for (auto&& roomData: data.takeRoomData()) { @@ -337,7 +337,7 @@ void Connection::onSyncSuccess(SyncData &&data) { } if ( auto* r = provideRoom(roomData.roomId, roomData.joinState) ) { - r->updateData(std::move(roomData)); + r->updateData(std::move(roomData), fromCache); if (d->firstTimeRooms.removeOne(r)) emit loadedRoomState(r); } @@ -1156,7 +1156,7 @@ void Connection::loadState() // TODO: to handle load failures, instead of the above block: // 1. Do initial sync on failed rooms without saving the nextBatch token // 2. Do the sync across all rooms as normal - onSyncSuccess(std::move(sync)); + onSyncSuccess(std::move(sync), true); qCDebug(PROFILER) << "*** Cached state for" << userId() << "loaded in" << et; } diff --git a/lib/connection.h b/lib/connection.h index 20a1f47e..32533b6e 100644 --- a/lib/connection.h +++ b/lib/connection.h @@ -677,7 +677,7 @@ namespace QMatrixClient /** * Completes loading sync data. */ - void onSyncSuccess(SyncData &&data); + void onSyncSuccess(SyncData &&data, bool fromCache = false); private: class Private; diff --git a/lib/room.cpp b/lib/room.cpp index 2d958dca..22a0d585 100644 --- a/lib/room.cpp +++ b/lib/room.cpp @@ -1106,7 +1106,7 @@ QString Room::roomMembername(const QString& userId) const return roomMembername(user(userId)); } -void Room::updateData(SyncRoomData&& data) +void Room::updateData(SyncRoomData&& data, bool fromCache) { if( d->prevBatch.isEmpty() ) d->prevBatch = data.timelinePrevBatch; @@ -1172,7 +1172,8 @@ void Room::updateData(SyncRoomData&& data) if (roomChanges != Change::NoChange) { emit changed(roomChanges); - connection()->saveRoomState(this); + if (!fromCache) + connection()->saveRoomState(this); } } @@ -456,14 +456,6 @@ namespace QMatrixClient /// The room is about to be deleted void beforeDestruction(Room*); - public: // Used by Connection - not a part of the client API - QJsonObject toJson() const; - void updateData(SyncRoomData&& data ); - - // Clients should use Connection::joinRoom() and Room::leaveRoom() - // to change the room state - void setJoinState( JoinState state ); - protected: /// Returns true if any of room names/aliases has changed virtual Changes processStateEvent(const RoomEvent& e); @@ -473,10 +465,19 @@ namespace QMatrixClient virtual void onAddHistoricalTimelineEvents(rev_iter_t /*from*/) { } virtual void onRedaction(const RoomEvent& /*prevEvent*/, const RoomEvent& /*after*/) { } + virtual QJsonObject toJson() const; + virtual void updateData(SyncRoomData&& data, bool fromCache = false); private: + friend class Connection; + class Private; Private* d; + + // This is called from Connection, reflecting a state change that + // arrived from the server. Clients should use + // Connection::joinRoom() and Room::leaveRoom() to change the state. + void setJoinState(JoinState state); }; class MemberSorter |