db versioning

This commit is contained in:
Florian Dold 2016-03-02 00:47:00 +01:00
parent ff3cea6b64
commit 7c03db9ba0
5 changed files with 53 additions and 14 deletions

View File

@ -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) {

View File

@ -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;
}
};
});

View File

@ -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)

View File

@ -47,10 +47,12 @@ function makeHandlers(db: IDBDatabase,
return exportDb(db);
},
["reset"]: function(detail) {
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();
chrome.browserAction.setBadgeText({text: ""});

View File

@ -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");
}