From 607a53f1be627bc3d810af31bee7c103383845b1 Mon Sep 17 00:00:00 2001 From: sairajzero Date: Wed, 8 Jan 2020 14:39:01 +0530 Subject: [PATCH] bug fix: IDB searchData --- app/index.html | 48 ++++++++++++++++++++++++++++-------------------- 1 file changed, 28 insertions(+), 20 deletions(-) diff --git a/app/index.html b/app/index.html index 446caa1..db816f6 100644 --- a/app/index.html +++ b/app/index.html @@ -8343,26 +8343,34 @@ Bitcoin.Util = { }); }, - searchData: function (obsName, patternEval, dbName = this.dbName) { - return new Promise((resolve, reject) => { - this.openDB(dbName).then(db => { - var obs = db.transaction(obsName, "readonly").objectStore(obsName); - var filteredResult = {} - let curReq = obs.openCursor(); - curReq.onsuccess = (evt) => { - var cursor = evt.target.result; - if (cursor) { - if (patternEval(cursor.primaryKey, cursor.value)) - filteredResult[cursor.primaryKey] = cursor.value; - cursor.continue(); - } else - resolve(filteredResult); - } - curReq.onerror = (evt) => reject( - `Search unsuccessful [${evt.target.error.name}] ${evt.target.error.message}`); - db.close(); - }).catch(error => reject(error)); - }); + searchData: function (obsName, options = {}, dbName = this.dbName) { + options.lowerKey = options.atKey || options.lowerKey || 0 + options.upperKey = options.atKey || options.upperKey || false + options.patternEval = options.patternEval || ((k,v) => {return true}) + options.lastOnly = options.lastOnly || false + return new Promise((resolve, reject) => { + this.openDB(dbName).then(db => { + var obs = db.transaction(obsName, "readonly").objectStore(obsName); + var filteredResult = {} + let curReq = obs.openCursor( + options.upperKey ? IDBKeyRange.bound(options.lowerKey,options.upperKey) : IDBKeyRange.lowerBound(options.lowerKey), + options.lastOnly ? "prev":"next" ); + curReq.onsuccess = (evt) => { + var cursor = evt.target.result; + if (cursor) { + if (options.patternEval(cursor.primaryKey, cursor.value)){ + filteredResult[cursor.primaryKey] = cursor.value; + options.lastOnly ? resolve(filteredResult) : cursor.continue(); + }else + cursor.continue(); + } else + resolve(filteredResult); + } + curReq.onerror = (evt) => reject( + `Search unsuccessful [${evt.target.error.name}] ${evt.target.error.message}`); + db.close(); + }).catch(error => reject(error)); + }); } }