1
0
mirror of https://github.com/matrix-org/matrix-js-sdk.git synced 2025-11-28 05:03:59 +03:00

Make indexeddb save after the first sync

Save the sync data to indexeddb after the first catch-up

Fixes https://github.com/vector-im/riot-web/issues/3527
This commit is contained in:
David Baker
2017-04-06 18:48:54 +01:00
parent 039a3e258b
commit b53318ecb7
2 changed files with 28 additions and 23 deletions

View File

@@ -89,7 +89,7 @@ const IndexedDBStore = function IndexedDBStore(opts) {
} }
this.startedUp = false; this.startedUp = false;
this._syncTs = Date.now(); // updated when writes to the database are performed this._syncTs = 0;
// Records the last-modified-time of each user at the last point we saved // Records the last-modified-time of each user at the last point we saved
// the database, such that we can derive the set if users that have been // the database, such that we can derive the set if users that have been
@@ -123,7 +123,6 @@ IndexedDBStore.prototype.startup = function() {
this._userModifiedMap[u.userId] = u.getLastModifiedTime(); this._userModifiedMap[u.userId] = u.getLastModifiedTime();
this.storeUser(u); this.storeUser(u);
}); });
this._syncTs = Date.now(); // pretend we've written so we don't rewrite
}); });
}; };
@@ -157,6 +156,12 @@ IndexedDBStore.prototype.deleteAllData = function() {
IndexedDBStore.prototype.save = function() { IndexedDBStore.prototype.save = function() {
const now = Date.now(); const now = Date.now();
if (now - this._syncTs > WRITE_DELAY_MS) { if (now - this._syncTs > WRITE_DELAY_MS) {
return this._reallySave();
}
return q();
};
IndexedDBStore.prototype._reallySave = function() {
this._syncTs = Date.now(); // set now to guard against multi-writes this._syncTs = Date.now(); // set now to guard against multi-writes
// work out changed users (this doesn't handle deletions but you // work out changed users (this doesn't handle deletions but you
@@ -175,8 +180,6 @@ IndexedDBStore.prototype.save = function() {
return this.backend.syncToDatabase(userTuples).catch((err) => { return this.backend.syncToDatabase(userTuples).catch((err) => {
console.error("sync fail:", err); console.error("sync fail:", err);
}); });
}
return q();
}; };
IndexedDBStore.prototype.setSyncData = function(syncData) { IndexedDBStore.prototype.setSyncData = function(syncData) {

View File

@@ -620,11 +620,13 @@ SyncApi.prototype._sync = function(syncOptions) {
// keep emitting SYNCING -> SYNCING for clients who want to do bulk updates // keep emitting SYNCING -> SYNCING for clients who want to do bulk updates
if (!isCachedResponse) { if (!isCachedResponse) {
self._updateSyncState("SYNCING", syncEventData); self._updateSyncState("SYNCING", syncEventData);
}
// tell databases that everything is now in a consistent state and can be // tell databases that everything is now in a consistent state and can be
// saved. // saved (no point doing so if we only have the data we just got out of the
// store).
client.store.save(); client.store.save();
}
// Begin next sync // Begin next sync
self._sync(syncOptions); self._sync(syncOptions);