You've already forked matrix-js-sdk
mirror of
https://github.com/matrix-org/matrix-js-sdk.git
synced 2025-08-09 10:22:46 +03:00
Add remaining load functions
This commit is contained in:
@@ -18,6 +18,8 @@ limitations under the License.
|
|||||||
import q from "q";
|
import q from "q";
|
||||||
import {MatrixInMemoryStore} from "./memory";
|
import {MatrixInMemoryStore} from "./memory";
|
||||||
import User from "../models/user";
|
import User from "../models/user";
|
||||||
|
import Room from "../models/room";
|
||||||
|
import {MatrixEvent} from "../models/event";
|
||||||
import utils from "../utils";
|
import utils from "../utils";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -74,7 +76,7 @@ IndexedDBStoreBackend.prototype = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Persist a list of Room objects.
|
* Persist a list of Room objects. Rooms with the same 'roomId' will be replaced.
|
||||||
* @param {Room[]} rooms An array of rooms
|
* @param {Room[]} rooms An array of rooms
|
||||||
* @return {Promise} Resolves if the rooms were persisted.
|
* @return {Promise} Resolves if the rooms were persisted.
|
||||||
*/
|
*/
|
||||||
@@ -83,7 +85,7 @@ IndexedDBStoreBackend.prototype = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Persist a sync token.
|
* Persist a sync token. This will replace any existing sync token.
|
||||||
* @param {string} syncToken The token to persist.
|
* @param {string} syncToken The token to persist.
|
||||||
* @return {Promise} Resolves if the token was persisted.
|
* @return {Promise} Resolves if the token was persisted.
|
||||||
*/
|
*/
|
||||||
@@ -96,7 +98,8 @@ IndexedDBStoreBackend.prototype = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Persist a list of account data events.
|
* Persist a list of account data events. Events with the same 'type' will
|
||||||
|
* be replaced.
|
||||||
* @param {MatrixEvent[]} accountData An array of user-scoped account data events
|
* @param {MatrixEvent[]} accountData An array of user-scoped account data events
|
||||||
* @return {Promise} Resolves if the events were persisted.
|
* @return {Promise} Resolves if the events were persisted.
|
||||||
*/
|
*/
|
||||||
@@ -105,7 +108,8 @@ IndexedDBStoreBackend.prototype = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Persist a list of User objects.
|
* Persist a list of User objects. Users with the same 'userId' will be
|
||||||
|
* replaced.
|
||||||
* @param {User[]} users An array of users
|
* @param {User[]} users An array of users
|
||||||
* @return {Promise} Resolves if the users were persisted.
|
* @return {Promise} Resolves if the users were persisted.
|
||||||
*/
|
*/
|
||||||
@@ -118,18 +122,40 @@ IndexedDBStoreBackend.prototype = {
|
|||||||
* @return {Promise<User[]>} A list of users.
|
* @return {Promise<User[]>} A list of users.
|
||||||
*/
|
*/
|
||||||
loadUsers: function() {
|
loadUsers: function() {
|
||||||
|
return this._deserializeAll("users", User);
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load all the rooms from the database. This is not cached.
|
||||||
|
* @return {Promise<Room[]>} A list of rooms.
|
||||||
|
*/
|
||||||
|
loadRooms: function() {
|
||||||
|
return this._deserializeAll("rooms", Room);
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load all the account data events from the database. This is not cached.
|
||||||
|
* @return {Promise<MatrixEvent[]>} A list of events.
|
||||||
|
*/
|
||||||
|
loadAccountData: function() {
|
||||||
|
return this._deserializeAll("accountData", MatrixEvent);
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load the sync token from the database.
|
||||||
|
* @return {Promise<?string>} The sync token
|
||||||
|
*/
|
||||||
|
loadSyncToken: function() {
|
||||||
return q.try(() => {
|
return q.try(() => {
|
||||||
const txn = this.db.transaction(["users"], "readonly");
|
const txn = this.db.transaction(["config"], "readonly");
|
||||||
const store = txn.objectStore("users");
|
const store = txn.objectStore("config");
|
||||||
return selectQuery(store, undefined, (cursor) => {
|
const results = selectQuery(store, undefined, (cursor) => {
|
||||||
if (typeof User.deserialize === "function") {
|
return cursor.value;
|
||||||
return User.deserialize(cursor.value);
|
|
||||||
} else {
|
|
||||||
const user = new User(cursor.value.userId);
|
|
||||||
Object.assign(user, cursor.value);
|
|
||||||
return user;
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
if (results.length > 1) {
|
||||||
|
console.warn("loadSyncToken: More than 1 config row found.");
|
||||||
|
}
|
||||||
|
return (results.length > 0 ? results[0].syncToken : null);
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -147,6 +173,16 @@ IndexedDBStoreBackend.prototype = {
|
|||||||
return promiseifyTxn(txn);
|
return promiseifyTxn(txn);
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_deserializeAll: function(storeName, Cls) {
|
||||||
|
return q.try(() => {
|
||||||
|
const txn = this.db.transaction([storeName], "readonly");
|
||||||
|
const store = txn.objectStore(storeName);
|
||||||
|
return selectQuery(store, undefined, (cursor) => {
|
||||||
|
return Cls.deserialize(cursor.value);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -178,6 +214,9 @@ IndexedDBStoreBackend.prototype = {
|
|||||||
* @extends MatrixInMemoryStore
|
* @extends MatrixInMemoryStore
|
||||||
* @param {IndexedDBStoreBackend} backend The indexed db backend instance.
|
* @param {IndexedDBStoreBackend} backend The indexed db backend instance.
|
||||||
* @param {Object=} opts Options for MatrixInMemoryStore.
|
* @param {Object=} opts Options for MatrixInMemoryStore.
|
||||||
|
* @prop {IndexedDBStoreBackend} backend The backend instance. Call through to
|
||||||
|
* this API if you need to perform specific indexeddb actions like deleting the
|
||||||
|
* database.
|
||||||
*/
|
*/
|
||||||
const IndexedDBStore = function IndexedDBStore(backend, opts) {
|
const IndexedDBStore = function IndexedDBStore(backend, opts) {
|
||||||
MatrixInMemoryStore.call(this, opts);
|
MatrixInMemoryStore.call(this, opts);
|
||||||
|
Reference in New Issue
Block a user