Improved Read Data from blockchain via API

Replaced floBlockchainAPI's readSentData, readDataPattern, readSentDataPattern, readDataContains, readSentDataContains with a improved version 'readData'
readData is Promisfied function that reads and resolves floData from blockchain using API
Arguments :
addr - address from which the floData should be read
options - (optional object, default = {})
Options :
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] == '$'})
This commit is contained in:
sairajzero 2019-10-06 02:52:34 +05:30
parent 8fd579dc5e
commit 9da3168f45

View File

@ -5114,81 +5114,43 @@
}); });
}, },
//Read Data Sent from Address (if limit is specified, only return newest sent data) /*Read flo Data from txs of given Address
readSentData: function (addr, limit = 0) { options can be used to filter data
return new Promise((resolve, reject) => { limit : maximum number of filtered data (default = 1000, negative = no limit)
this.readAllTxs(addr).then(items => { ignoreOld : ignore old txs (default = 0)
var filteredItems = []; sentOnly : filters only sent data
if (limit <= 0) limit = items.length; pattern : filters data that starts with a pattern
for (i = 0; i < items.length && filteredItems.length < limit; i++) contains : filters data that contains a string
if (items[i].vin[0].addr === addr) filter : custom filter funtion for floData (eg . filter: d => {return d[0] == '$'})
filteredItems.push(items[i].floData); */
console.log(filteredItems); readData: function(addr,options = {}){
resolve(filteredItems); 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 => { }).catch(error => {
reject(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)
}); });
}); });
} }