aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2016-03-02 00:47:00 +0100
committerFlorian Dold <florian.dold@gmail.com>2016-03-02 00:49:10 +0100
commit7c03db9ba0fcbf10da8fc37ff55b6d987aab8541 (patch)
tree396ad80cf28680ff1fe21a9fb60ec4b190899464
parentff3cea6b64704af2af824b074eadd32a00d2e72e (diff)
db versioning
-rw-r--r--content_scripts/notify.js6
-rw-r--r--lib/wallet/db.ts14
-rw-r--r--lib/wallet/wallet.ts7
-rw-r--r--lib/wallet/wxMessaging.ts8
-rw-r--r--popup/popup.tsx32
5 files changed, 53 insertions, 14 deletions
diff --git a/content_scripts/notify.js b/content_scripts/notify.js
index ee0d96d72..1a8f56b99 100644
--- a/content_scripts/notify.js
+++ b/content_scripts/notify.js
@@ -13,12 +13,14 @@
You should have received a copy of the GNU General Public License along with
TALER; see the file COPYING. If not, If not, see <http://www.gnu.org/licenses/>
*/
-/// <reference path="../lib/decl/chrome/chrome.d.ts" />
-"use strict";
/**
* Script that is injected into (all!) pages to allow them
* to interact with the GNU Taler wallet via DOM Events.
+ *
+ * @author Florian Dold
*/
+/// <reference path="../lib/decl/chrome/chrome.d.ts" />
+"use strict";
// Make sure we don't pollute the namespace too much.
var TalerNotify;
(function (TalerNotify) {
diff --git a/lib/wallet/db.ts b/lib/wallet/db.ts
index 2503468d5..9374aa447 100644
--- a/lib/wallet/db.ts
+++ b/lib/wallet/db.ts
@@ -25,7 +25,7 @@
*/
const DB_NAME = "taler";
-const DB_VERSION = 1;
+const DB_VERSION = 5;
/**
* Return a promise that resolves
@@ -45,7 +45,8 @@ export function openTalerDb(): Promise<IDBDatabase> {
console.log("DB: upgrade needed: oldVersion = " + e.oldVersion);
switch (e.oldVersion) {
case 0: // DB does not exist yet
- const exchanges = db.createObjectStore("exchanges", {keyPath: "baseUrl"});
+ const exchanges = db.createObjectStore("exchanges",
+ {keyPath: "baseUrl"});
exchanges.createIndex("pubKey", "masterPublicKey");
db.createObjectStore("reserves", {keyPath: "reserve_pub"});
db.createObjectStore("denoms", {keyPath: "denomPub"});
@@ -68,6 +69,15 @@ export function openTalerDb(): Promise<IDBDatabase> {
});
history.createIndex("timestamp", "timestamp");
break;
+ default:
+ if (e.oldVersion != DB_VERSION) {
+ window.alert("Incompatible wallet dababase version, please reset" +
+ " db.");
+ chrome.browserAction.setBadgeText({text: "R!"});
+ chrome.browserAction.setBadgeBackgroundColor({color: "#F00"});
+ throw Error("incompatible DB");
+ }
+ break;
}
};
});
diff --git a/lib/wallet/wallet.ts b/lib/wallet/wallet.ts
index 94ac8ee8a..3764edfbc 100644
--- a/lib/wallet/wallet.ts
+++ b/lib/wallet/wallet.ts
@@ -912,7 +912,10 @@ export class Wallet {
return Query(this.db)
.iter("coins")
- .reduce(collectBalances, {});
+ .reduce(collectBalances, {})
+ .then(byCurrency => {
+ return {balances: byCurrency};
+ });
}
@@ -922,7 +925,7 @@ export class Wallet {
getHistory(): Promise<any[]> {
function collect(x, acc) {
acc.push(x);
- return acc;
+ return {history: acc};
}
return Query(this.db)
diff --git a/lib/wallet/wxMessaging.ts b/lib/wallet/wxMessaging.ts
index a6b3f9d1b..d49a80efb 100644
--- a/lib/wallet/wxMessaging.ts
+++ b/lib/wallet/wxMessaging.ts
@@ -47,9 +47,11 @@ function makeHandlers(db: IDBDatabase,
return exportDb(db);
},
["reset"]: function(detail) {
- let tx = db.transaction(db.objectStoreNames, 'readwrite');
- for (let i = 0; i < db.objectStoreNames.length; i++) {
- tx.objectStore(db.objectStoreNames[i]).clear();
+ if (db) {
+ let tx = db.transaction(db.objectStoreNames, 'readwrite');
+ for (let i = 0; i < db.objectStoreNames.length; i++) {
+ tx.objectStore(db.objectStoreNames[i]).clear();
+ }
}
deleteDb();
diff --git a/popup/popup.tsx b/popup/popup.tsx
index 2cd753e4f..be33f870a 100644
--- a/popup/popup.tsx
+++ b/popup/popup.tsx
@@ -95,6 +95,7 @@ namespace WalletBalance {
class Controller {
myWallet;
+ gotError = false;
constructor() {
this.updateBalance();
@@ -104,9 +105,16 @@ namespace WalletBalance {
updateBalance() {
m.startComputation();
- chrome.runtime.sendMessage({type: "balances"}, (wallet) => {
- console.log("got wallet", wallet);
- this.myWallet = wallet;
+ chrome.runtime.sendMessage({type: "balances"}, (resp) => {
+ if (resp.error) {
+ this.gotError = true;
+ console.error("could not retrieve balances", resp);
+ m.endComputation();
+ return;
+ }
+ this.gotError = false;
+ console.log("got wallet", resp);
+ this.myWallet = resp.balances;
m.endComputation();
});
}
@@ -114,6 +122,9 @@ namespace WalletBalance {
export function view(ctrl: Controller) {
let wallet = ctrl.myWallet;
+ if (ctrl.gotError) {
+ return i18n`Error: could not retrieve balance information.`;
+ }
if (!wallet) {
throw Error("Could not retrieve wallet");
}
@@ -200,6 +211,7 @@ namespace WalletHistory {
class Controller {
myHistory;
+ gotError = false;
constructor() {
this.update();
@@ -209,8 +221,15 @@ namespace WalletHistory {
update() {
m.startComputation();
chrome.runtime.sendMessage({type: "get-history"}, (resp) => {
- console.log("got history", history);
- this.myHistory = resp;
+ if (resp.error) {
+ this.gotError = true;
+ console.error("could not retrieve history", resp);
+ m.endComputation();
+ return;
+ }
+ this.gotError = false;
+ console.log("got history", resp.history);
+ this.myHistory = resp.history;
m.endComputation();
});
}
@@ -218,6 +237,9 @@ namespace WalletHistory {
export function view(ctrl: Controller) {
let history = ctrl.myHistory;
+ if (ctrl.gotError) {
+ return i18n`Error: could not retrieve event history`;
+ }
if (!history) {
throw Error("Could not retrieve history");
}