gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-wallet-core] 01/02: import a complete database from cli


From: gnunet
Subject: [taler-wallet-core] 01/02: import a complete database from cli
Date: Wed, 14 Sep 2022 13:20:18 +0200

This is an automated email from the git hooks/post-receive script.

sebasjm pushed a commit to branch master
in repository wallet-core.

commit f026a8d326bf64f76cd2523b68b8f84e0eb68361
Author: Sebastian <sebasjm@gmail.com>
AuthorDate: Tue Sep 13 13:39:25 2022 -0300

    import a complete database from cli
---
 packages/taler-wallet-core/src/db.ts               | 52 ++++++++++++++++++++--
 .../src/wallet/History.tsx                         |  5 +--
 2 files changed, 51 insertions(+), 6 deletions(-)

diff --git a/packages/taler-wallet-core/src/db.ts 
b/packages/taler-wallet-core/src/db.ts
index 832bbb9a..da566ff2 100644
--- a/packages/taler-wallet-core/src/db.ts
+++ b/packages/taler-wallet-core/src/db.ts
@@ -2024,11 +2024,11 @@ export interface DatabaseDump {
   version: string;
 }
 
-export function importDb(db: IDBDatabase, dump: DatabaseDump): Promise<any> {
+async function recoverFromDump(db: IDBDatabase, dump: DatabaseDump): 
Promise<void> {
   return new Promise((resolve, reject) => {
     const tx = db.transaction(Array.from(db.objectStoreNames), "readwrite");
     tx.addEventListener("complete", () => {
-      resolve(db);
+      resolve();
     });
     for (let i = 0; i < db.objectStoreNames.length; i++) {
       const name = db.objectStoreNames[i];
@@ -2041,5 +2041,51 @@ export function importDb(db: IDBDatabase, dump: 
DatabaseDump): Promise<any> {
       });
     }
     tx.commit();
-  });
+  })
+}
+
+export async function importDb(db: IDBDatabase, object: any): Promise<void> {
+  if ("name" in object && "stores" in object && "version" in object) {
+    // looks like a database dump
+    const dump = object as DatabaseDump
+    return recoverFromDump(db, dump);
+  }
+
+  if ("databases" in object && "$types" in object) {
+    // looks like a IDBDatabase
+    const someDatabase = object.databases;
+
+    if (TALER_META_DB_NAME in someDatabase) {
+      //looks like a taler database
+      const currentMainDbValue = 
someDatabase[TALER_META_DB_NAME].objectStores.metaConfig.records[0].value.value
+
+      if (currentMainDbValue !== TALER_DB_NAME) {
+        console.log("not the current database version")
+      }
+
+      const talerDb = someDatabase[currentMainDbValue];
+
+      const objectStoreNames = Object.keys(talerDb.objectStores);
+
+      const dump: DatabaseDump = {
+        name: talerDb.schema.databaseName,
+        version: talerDb.schema.databaseVersion,
+        stores: {},
+      }
+
+      for (let i = 0; i < objectStoreNames.length; i++) {
+        const name = objectStoreNames[i];
+        const storeDump = {} as { [s: string]: any };
+        dump.stores[name] = storeDump;
+        talerDb.objectStores[name].records.map((r: any) => {
+          const pkey = r.primaryKey
+          const key = typeof pkey === "string" ? pkey : pkey.join(",")
+          storeDump[key] = r.value;
+        })
+      }
+
+      return recoverFromDump(db, dump);
+    }
+  }
+  throw Error("could not import database");
 }
diff --git a/packages/taler-wallet-webextension/src/wallet/History.tsx 
b/packages/taler-wallet-webextension/src/wallet/History.tsx
index 6a8362dd..53913501 100644
--- a/packages/taler-wallet-webextension/src/wallet/History.tsx
+++ b/packages/taler-wallet-webextension/src/wallet/History.tsx
@@ -25,7 +25,6 @@ import { useEffect, useState } from "preact/hooks";
 import { Loading } from "../components/Loading.js";
 import { LoadingError } from "../components/LoadingError.js";
 import {
-  ButtonBoxPrimary,
   CenteredBoldText,
   CenteredText,
   DateSeparator,
@@ -37,6 +36,8 @@ import { useTranslationContext } from 
"../context/translation.js";
 import { useAsyncAsHook } from "../hooks/useAsyncAsHook.js";
 import { Button } from "../mui/Button.js";
 import { NoBalanceHelp } from "../popup/NoBalanceHelp.js";
+import DownloadIcon from "../svg/download_24px.svg";
+import UploadIcon from "../svg/upload_24px.svg";
 import * as wxApi from "../wxApi.js";
 
 interface Props {
@@ -96,8 +97,6 @@ const term = 1000 * 60 * 60 * 24;
 function normalizeToDay(x: number): number {
   return Math.round(x / term) * term;
 }
-import DownloadIcon from "../svg/download_24px.svg";
-import UploadIcon from "../svg/upload_24px.svg";
 
 export function HistoryView({
   defaultCurrency,

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]