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._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
// 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.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() {
const now = Date.now();
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
// 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) => {
console.error("sync fail:", err);
});
}
return q();
};
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
if (!isCachedResponse) {
self._updateSyncState("SYNCING", syncEventData);
}
// 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();
}
// Begin next sync
self._sync(syncOptions);