diff options
author | Sebastian <sebasjm@gmail.com> | 2022-01-13 01:30:26 -0300 |
---|---|---|
committer | Sebastian <sebasjm@gmail.com> | 2022-01-13 01:34:16 -0300 |
commit | 5eeb00e158ee5908bb4b62374f43e35d1a5f1a49 (patch) | |
tree | d30e9ad0ada990ae91296591ad1c7361b2fe4d19 | |
parent | 9f6e398884ee158cd22c685ce308043a25234095 (diff) |
importDb feature in wallet core
-rw-r--r-- | packages/taler-wallet-core/src/db.ts | 51 |
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) + }) + + } + }); +} |