diff options
author | Sebastian <sebasjm@gmail.com> | 2022-04-29 13:16:29 -0300 |
---|---|---|
committer | Sebastian <sebasjm@gmail.com> | 2022-04-29 15:49:16 -0300 |
commit | 038dcbc9b7378552bd5b0548fe373dbd2867c971 (patch) | |
tree | 2bef67bf7dd4f8ae9e6981809b3198bb1f56f38e | |
parent | a1ad9727eec21a231d83fc08d14547454769374c (diff) |
fix #5845 added run-gc on webex
-rw-r--r-- | packages/taler-wallet-core/src/db.ts | 26 | ||||
-rw-r--r-- | packages/taler-wallet-webextension/src/wallet/DeveloperPage.tsx | 17 | ||||
-rw-r--r-- | packages/taler-wallet-webextension/src/wxApi.ts | 8 | ||||
-rw-r--r-- | packages/taler-wallet-webextension/src/wxBackend.ts | 14 |
4 files changed, 50 insertions, 15 deletions
diff --git a/packages/taler-wallet-core/src/db.ts b/packages/taler-wallet-core/src/db.ts index 0a1b40d2a..e8c46c7e3 100644 --- a/packages/taler-wallet-core/src/db.ts +++ b/packages/taler-wallet-core/src/db.ts @@ -1303,9 +1303,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 { @@ -1491,17 +1491,17 @@ export enum BackupProviderStateTag { export type BackupProviderState = | { - tag: BackupProviderStateTag.Provisional; - } + tag: BackupProviderStateTag.Provisional; + } | { - tag: BackupProviderStateTag.Ready; - nextBackupTimestamp: TalerProtocolTimestamp; - } + tag: BackupProviderStateTag.Ready; + nextBackupTimestamp: TalerProtocolTimestamp; + } | { - tag: BackupProviderStateTag.Retrying; - retryInfo: RetryInfo; - lastError?: TalerErrorDetail; - }; + tag: BackupProviderStateTag.Retrying; + retryInfo: RetryInfo; + lastError?: TalerErrorDetail; + }; export interface BackupProviderTerms { supportedProtocolVersion: string; @@ -1895,7 +1895,6 @@ 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++) { @@ -1908,5 +1907,6 @@ export function importDb(db: IDBDatabase, dump: DatabaseDump): Promise<any> { tx.objectStore(name).put(value); }); } + tx.commit(); }); } diff --git a/packages/taler-wallet-webextension/src/wallet/DeveloperPage.tsx b/packages/taler-wallet-webextension/src/wallet/DeveloperPage.tsx index e371775f4..829e60b44 100644 --- a/packages/taler-wallet-webextension/src/wallet/DeveloperPage.tsx +++ b/packages/taler-wallet-webextension/src/wallet/DeveloperPage.tsx @@ -36,7 +36,8 @@ export function DeveloperPage(): VNode { const [status, timedOut] = useDiagnostics(); const listenAllEvents = Array.from<NotificationType>({ length: 1 }); - listenAllEvents.includes = () => true; // includes every event + //FIXME: waiting for retry notification make a always increasing loop of notifications + listenAllEvents.includes = (e) => e !== "waiting-for-retry"; // includes every event const response = useAsyncAsHook(async () => { const op = await wxApi.getPendingOperations(); @@ -160,11 +161,22 @@ export function View({ onClick={() => confirmReset( i18n.str`Do you want to IRREVOCABLY DESTROY everything inside your wallet and LOSE ALL YOUR COINS?`, + wxApi.resetDb, ) } > <i18n.Translate>reset</i18n.Translate> </button> + <button + onClick={() => + confirmReset( + i18n.str`TESTING: This may delete all your coin, proceed with caution`, + wxApi.runGarbageCollector, + ) + } + > + <i18n.Translate>run gc</i18n.Translate> + </button> <br /> <button onClick={() => fileRef?.current?.click()}> <i18n.Translate>import database</i18n.Translate> @@ -385,9 +397,10 @@ function toBase64(str: string): string { export async function confirmReset( confirmTheResetMessage: string, + cb: () => Promise<void>, ): Promise<void> { if (confirm(confirmTheResetMessage)) { - await wxApi.resetDb(); + await cb(); window.close(); } } diff --git a/packages/taler-wallet-webextension/src/wxApi.ts b/packages/taler-wallet-webextension/src/wxApi.ts index da80e9bde..3079392b6 100644 --- a/packages/taler-wallet-webextension/src/wxApi.ts +++ b/packages/taler-wallet-webextension/src/wxApi.ts @@ -140,6 +140,14 @@ export function resetDb(): Promise<void> { return callBackend("reset-db", {}); } +/** + * Reset database + */ +export function runGarbageCollector(): Promise<void> { + return callBackend("run-gc", {}); +} + + export function getFeeForDeposit( depositPaytoUri: string, amount: AmountString, diff --git a/packages/taler-wallet-webextension/src/wxBackend.ts b/packages/taler-wallet-webextension/src/wxBackend.ts index 2ac8f6343..f5483e807 100644 --- a/packages/taler-wallet-webextension/src/wxBackend.ts +++ b/packages/taler-wallet-webextension/src/wxBackend.ts @@ -33,6 +33,8 @@ import { import { DbAccess, deleteTalerDatabase, + exportDb, + importDb, makeErrorDetail, OpenedPromise, openPromise, @@ -129,6 +131,18 @@ async function dispatch( r = wrapResponse(await reinitWallet()); break; } + case "run-gc": { + logger.info("gc") + const dump = await exportDb(currentDatabase!.idbHandle()); + await deleteTalerDatabase(indexedDB as any); + logger.info("cleaned") + await reinitWallet(); + logger.info("init") + await importDb(currentDatabase!.idbHandle(), dump) + logger.info("imported") + r = wrapResponse({ result: true }); + break; + } case "containsHeaderListener": { const res = await platform.containsTalerHeaderListener(); r = wrapResponse({ newValue: res }); |