aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian <sebasjm@gmail.com>2022-01-13 01:30:26 -0300
committerSebastian <sebasjm@gmail.com>2022-01-13 01:34:16 -0300
commit5eeb00e158ee5908bb4b62374f43e35d1a5f1a49 (patch)
treed30e9ad0ada990ae91296591ad1c7361b2fe4d19
parent9f6e398884ee158cd22c685ce308043a25234095 (diff)
importDb feature in wallet core
-rw-r--r--packages/taler-wallet-core/src/db.ts51
1 files changed, 39 insertions, 12 deletions
diff --git a/packages/taler-wallet-core/src/db.ts b/packages/taler-wallet-core/src/db.ts
index 0b2d16ae7..c3d67d7cb 100644
--- a/packages/taler-wallet-core/src/db.ts
+++ b/packages/taler-wallet-core/src/db.ts
@@ -1294,9 +1294,9 @@ export const WALLET_BACKUP_STATE_KEY = "walletBackupState";
*/
export type ConfigRecord =
| {
- key: typeof WALLET_BACKUP_STATE_KEY;
- value: WalletBackupConfState;
- }
+ key: typeof WALLET_BACKUP_STATE_KEY;
+ value: WalletBackupConfState;
+ }
| { key: "currencyDefaultsApplied"; value: boolean };
export interface WalletBackupConfState {
@@ -1480,17 +1480,17 @@ export enum BackupProviderStateTag {
export type BackupProviderState =
| {
- tag: BackupProviderStateTag.Provisional;
- }
+ tag: BackupProviderStateTag.Provisional;
+ }
| {
- tag: BackupProviderStateTag.Ready;
- nextBackupTimestamp: Timestamp;
- }
+ tag: BackupProviderStateTag.Ready;
+ nextBackupTimestamp: Timestamp;
+ }
| {
- tag: BackupProviderStateTag.Retrying;
- retryInfo: RetryInfo;
- lastError?: TalerErrorDetails;
- };
+ tag: BackupProviderStateTag.Retrying;
+ retryInfo: RetryInfo;
+ lastError?: TalerErrorDetails;
+ };
export interface BackupProviderTerms {
supportedProtocolVersion: string;
@@ -1873,3 +1873,30 @@ export function exportDb(db: IDBDatabase): Promise<any> {
}
});
}
+
+export interface DatabaseDump {
+ name: string,
+ stores: { [s: string]: any },
+ version: string,
+}
+
+export function importDb(db: IDBDatabase, dump: DatabaseDump): Promise<any> {
+ return new Promise((resolve, reject) => {
+ const tx = db.transaction(Array.from(db.objectStoreNames), "readwrite");
+ tx.addEventListener("complete", () => {
+ tx.commit();
+ resolve(db);
+ });
+ for (let i = 0; i < db.objectStoreNames.length; i++) {
+ const name = db.objectStoreNames[i];
+ const storeDump = dump.stores[name];
+ if (!storeDump) continue;
+ Object.keys(storeDump).forEach(async key => {
+ const value = storeDump[key]
+ if (!value) return;
+ tx.objectStore(name).put(value)
+ })
+
+ }
+ });
+}