aboutsummaryrefslogtreecommitdiff
path: root/lib/wallet/query.ts
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2016-03-05 01:36:38 +0100
committerFlorian Dold <florian.dold@gmail.com>2016-03-05 01:36:38 +0100
commit8cbef4c4c7a976967527234b6c3b6117b6de9808 (patch)
tree4f8d47dd0ba7e953245d19ca361f7477b785b121 /lib/wallet/query.ts
parent1b2897c03b08e730a2e965e50bbd2104a7a81eef (diff)
downloadwallet-core-8cbef4c4c7a976967527234b6c3b6117b6de9808.tar.xz
fix inadvertent double spending with coin selection
Diffstat (limited to 'lib/wallet/query.ts')
-rw-r--r--lib/wallet/query.ts17
1 files changed, 13 insertions, 4 deletions
diff --git a/lib/wallet/query.ts b/lib/wallet/query.ts
index 62411dab3..1e39fda0f 100644
--- a/lib/wallet/query.ts
+++ b/lib/wallet/query.ts
@@ -144,6 +144,7 @@ class QueryStreamIndexJoin<T> extends QueryStreamBase<T> {
f(true, undefined, tx);
return;
}
+ console.log("joining on", this.key(value));
let s = tx.objectStore(this.storeName).index(this.indexName);
let req = s.openCursor(IDBKeyRange.only(this.key(value)));
req.onsuccess = () => {
@@ -163,14 +164,14 @@ class QueryStreamIndexJoin<T> extends QueryStreamBase<T> {
class IterQueryStream<T> extends QueryStreamBase<T> {
private storeName;
private options;
+ private subscribers;
constructor(qr, storeName, options) {
super(qr);
this.options = options;
this.storeName = storeName;
- }
+ this.subscribers = [];
- subscribe(f) {
let doIt = (tx) => {
const {indexName = void 0, only = void 0} = this.options;
let s;
@@ -188,16 +189,24 @@ class IterQueryStream<T> extends QueryStreamBase<T> {
req.onsuccess = (e) => {
let cursor: IDBCursorWithValue = req.result;
if (cursor) {
- f(false, cursor.value, tx);
+ for (let f of this.subscribers) {
+ f(false, cursor.value, tx);
+ }
cursor.continue();
} else {
- f(true, undefined, tx);
+ for (let f of this.subscribers) {
+ f(true, undefined, tx);
+ }
}
}
};
this.root.addWork(doIt, null, false);
}
+
+ subscribe(f) {
+ this.subscribers.push(f);
+ }
}