From cea0ac02b64c2a575a5788552e813d315e3f3096 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Thu, 13 Jan 2022 01:33:24 -0300 Subject: import db from the wallet web extension --- packages/taler-util/src/walletTypes.ts | 8 +++++++ packages/taler-wallet-core/src/wallet.ts | 7 ++++++ .../src/popup/DeveloperPage.tsx | 27 +++++++++++++++++++++- .../src/wallet/DepositPage.tsx | 18 +++++++-------- packages/taler-wallet-webextension/src/wxApi.ts | 4 ++++ 5 files changed, 54 insertions(+), 10 deletions(-) (limited to 'packages') diff --git a/packages/taler-util/src/walletTypes.ts b/packages/taler-util/src/walletTypes.ts index 4158dde9e..4a871e743 100644 --- a/packages/taler-util/src/walletTypes.ts +++ b/packages/taler-util/src/walletTypes.ts @@ -1088,3 +1088,11 @@ export const codecForWithdrawFakebankRequest = (): Codec => + buildCodecForObject() + .property("dump", codecForAny()) + .build("ImportDbRequest") diff --git a/packages/taler-wallet-core/src/wallet.ts b/packages/taler-wallet-core/src/wallet.ts index 2f94d5e82..3d83ec21d 100644 --- a/packages/taler-wallet-core/src/wallet.ts +++ b/packages/taler-wallet-core/src/wallet.ts @@ -45,6 +45,7 @@ import { PaytoUri, codecForGetFeeForDeposit, codecForListKnownBankAccounts, + codecForImportDbRequest, } from "@gnu-taler/taler-util"; import { addBackupProvider, @@ -130,6 +131,7 @@ import { AuditorTrustRecord, CoinSourceType, exportDb, + importDb, ReserveRecordStatus, WalletStoresV1, } from "./db.js"; @@ -997,6 +999,11 @@ async function dispatchRequestInternal( const dbDump = await exportDb(ws.db.idbHandle()); return dbDump; } + case "importDb": { + const req = codecForImportDbRequest().decode(payload); + await importDb(ws.db.idbHandle(), req.dump); + return []; + } } throw OperationFailedError.fromCode( TalerErrorCode.WALLET_CORE_API_OPERATION_UNKNOWN, diff --git a/packages/taler-wallet-webextension/src/popup/DeveloperPage.tsx b/packages/taler-wallet-webextension/src/popup/DeveloperPage.tsx index 840398a44..ea87ba01f 100644 --- a/packages/taler-wallet-webextension/src/popup/DeveloperPage.tsx +++ b/packages/taler-wallet-webextension/src/popup/DeveloperPage.tsx @@ -18,7 +18,7 @@ import { NotificationType } from "@gnu-taler/taler-util"; import { PendingTaskInfo } from "@gnu-taler/taler-wallet-core"; import { format } from "date-fns"; import { Fragment, h, VNode } from "preact"; -import { useState } from "preact/hooks"; +import { useRef, useState } from "preact/hooks"; import { Diagnostics } from "../components/Diagnostics"; import { NotifyUpdateFadeOut } from "../components/styled"; import { Time } from "../components/Time"; @@ -83,11 +83,34 @@ export function View({ content, }); } + const fileRef = useRef(null); + async function onImportDatabase(str: string): Promise { + return wxApi.importDB(JSON.parse(str)); + } return (

Debug tools:


+ + { + const f: FileList | null = e.currentTarget.files; + if (!f || f.length != 1) { + return Promise.reject(); + } + const buf = await f[0].arrayBuffer(); + const str = new Uint8Array(buf).reduce( + (data, byte) => data + String.fromCharCode(byte), + "", + ); + return onImportDatabase(str); + }} + /> +
{downloadedDatabase && (
@@ -152,6 +175,8 @@ export function reload(): void { } } +function runIntegrationTest() {} + export async function confirmReset(): Promise { if ( confirm( diff --git a/packages/taler-wallet-webextension/src/wallet/DepositPage.tsx b/packages/taler-wallet-webextension/src/wallet/DepositPage.tsx index 9e15daa97..abe830e87 100644 --- a/packages/taler-wallet-webextension/src/wallet/DepositPage.tsx +++ b/packages/taler-wallet-webextension/src/wallet/DepositPage.tsx @@ -110,7 +110,6 @@ export function View({ setAmount(num); setFee(undefined); } - const feeHasBeenCalculated = fee !== undefined; const currency = balance.currency; const amountStr: AmountString = `${currency}:${amount}`; const feeSum = @@ -151,7 +150,7 @@ export function View({ : !parsedAmount ? "Invalid amount" : Amounts.cmp(balance, parsedAmount) === -1 - ? `To much, your current balance is ${Amounts.stringifyValue(balance)}` + ? `Too much, your current balance is ${Amounts.stringifyValue(balance)}` : undefined; const totalToDeposit = parsedAmount @@ -159,7 +158,7 @@ export function View({ : Amounts.getZero(currency); const unableToDeposit = - Amounts.isZero(totalToDeposit) && feeHasBeenCalculated; + Amounts.isZero(totalToDeposit) || fee === undefined || error !== undefined; return ( @@ -224,12 +223,13 @@ export function View({
- onSend(accountURI, amountStr)} - > - Deposit {Amounts.stringifyValue(totalToDeposit)} {currency} - + {unableToDeposit ? ( + Deposit + ) : ( + onSend(accountURI, amountStr)}> + Deposit {Amounts.stringifyValue(totalToDeposit)} {currency} + + )}
); diff --git a/packages/taler-wallet-webextension/src/wxApi.ts b/packages/taler-wallet-webextension/src/wxApi.ts index dc96efc75..d02a017a1 100644 --- a/packages/taler-wallet-webextension/src/wxApi.ts +++ b/packages/taler-wallet-webextension/src/wxApi.ts @@ -376,6 +376,10 @@ export function exportDB(): Promise { return callBackend("exportDb", {}); } +export function importDB(dump: any): Promise { + return callBackend("importDb", { dump }) +} + export function onUpdateNotification(messageTypes: Array, doCallback: () => void): () => void { // eslint-disable-next-line no-undef const port = chrome.runtime.connect({ name: "notifications" }); -- cgit v1.2.3