diff --git a/index.html b/index.html index a78a65d..9786771 100644 --- a/index.html +++ b/index.html @@ -5114,81 +5114,43 @@ }); }, - //Read Data Sent from Address (if limit is specified, only return newest sent data) - readSentData: function (addr, limit = 0) { - return new Promise((resolve, reject) => { - this.readAllTxs(addr).then(items => { - var filteredItems = []; - if (limit <= 0) limit = items.length; - for (i = 0; i < items.length && filteredItems.length < limit; i++) - if (items[i].vin[0].addr === addr) - filteredItems.push(items[i].floData); - console.log(filteredItems); - resolve(filteredItems); + /*Read flo Data from txs of given Address + options can be used to filter data + limit : maximum number of filtered data (default = 1000, negative = no limit) + ignoreOld : ignore old txs (default = 0) + sentOnly : filters only sent data + pattern : filters data that starts with a pattern + contains : filters data that contains a string + filter : custom filter funtion for floData (eg . filter: d => {return d[0] == '$'}) + */ + readData: function(addr,options = {}){ + options.limit = options.limit | 1000 + options.ignoreOld = options.ignoreOld | 0 + return new Promise((resolve, reject) => { + this.promisedAJAX("GET", `api/addrs/${addr}/txs?from=0&to=1`).then(response => { + var newItems = JSON.parse(response).totalItems - options.ignoreOld; + this.promisedAJAX("GET", `api/addrs/${addr}/txs?from=0&to=${newItems*2}`).then(response => { + response = JSON.parse(response) + if (options.limit <= 0) + options.limit = response.items.length; + var filteredData = []; + for (i = 0; i < (response.totalItems - options.ignoreOld) && filteredData.length < options.limit; i++){ + if(options.sentOnly && response.items[i].vin[0].addr !== addr) + continue; + if(options.pattern && !response.items[i].floData.startsWith(options.pattern, 0) && !response.items[i].floData.startsWith(options.pattern, 2)) + continue; + if(options.contains && !response.items[i].floData.includes(options.contains)) + continue; + if(options.filter && !options.filter(response.items[i].floData)) + continue; + filteredData.push(response.items[i].floData); + } + resolve(filteredData); + }).catch(error => { + reject(error); + }); }).catch(error => { - reject(error) - }); - }); - }, - - //Read newest 'limit' Data matching 'pattern' - readDataPattern: function (addr, pattern, jsonType = false, limit = 1000) { - return new Promise((resolve, reject) => { - this.readAllTxs(addr).then(items => { - var filteredItems = []; - var pos = (jsonType ? 2 : 0); - for (i = 0; i < items.length && filteredItems.length < limit; i++) - if (items[i].floData.startsWith(pattern, pos)) - filteredItems.push(items[i].floData); - resolve(filteredItems); - }).catch(error => { - reject(error) - }); - }); - }, - - //Read newest 'limit' Data Sent from Address and matching 'pattern' - readSentDataPattern: function (addr, pattern, jsonType = false, limit = 1000) { - return new Promise((resolve, reject) => { - this.readAllTxs(addr).then(items => { - var filteredItems = []; - var pos = (jsonType ? 2 : 0); - for (i = 0; i < items.length && filteredItems.length < limit; i++) - if (items[i].vin[0].addr === addr && items[i].floData.startsWith(pattern, pos)) - filteredItems.push(items[i].floData); - resolve(filteredItems); - }).catch(error => { - reject(error) - }); - }); - }, - - //Read newest 'limit' Data containing 'keyword' - readDataContains: function (addr, keyword, limit = 1000) { - return new Promise((resolve, reject) => { - this.readAllTxs(addr).then(items => { - var filteredItems = []; - for (i = 0; i < items.length && filteredItems.length < limit; i++) - if (items[i].floData.includes(keyword)) - filteredItems.push(items[i].floData); - resolve(filteredItems); - }).catch(error => { - reject(error) - }); - }); - }, - - //Read newest 'limit' Data Sent from Address and containing 'keyword' - readSentDataContains: function (addr, keyword, limit = 1000) { - return new Promise((resolve, reject) => { - this.readAllTxs(addr).then(items => { - var filteredItems = []; - for (i = 0; i < items.length && filteredItems.length < limit; i++) - if (items[i].vin[0].addr === addr && items[i].floData.includes(keyword)) - filteredItems.push(items[i].floData); - resolve(filteredItems); - }).catch(error => { - reject(error) + reject(error); }); }); }