diff --git a/config.xml b/config.xml index 0ed540333dc0f65c0e67692f151c1955628cabb3..424696153ad0fc8510f2dd9d91b688615ee76522 100644 --- a/config.xml +++ b/config.xml @@ -3,8 +3,8 @@ xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0" id="fr.duniter.cesium" - version="0.1.19" - android-versionCode="7" + version="0.1.20" + android-versionCode="8" > <name>Cesium</name> <description> diff --git a/package.json b/package.json index 55a40d4c95faa80e26510996c02b6e3768c0fb50..e866f0e2a5f0683bcfb8dbaebd24306afa14ca98 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cesium", - "version": "0.1.19", + "version": "0.1.20", "description": "A webapp client for Duniter network", "dependencies": { "delete-empty": "^0.1.3", diff --git a/www/js/config.js b/www/js/config.js index d16fa7b2e3825c6763a7d4a9a8ecb01026fcb06f..7e9b78009609fd2507285cd60f905efa876cd389 100644 --- a/www/js/config.js +++ b/www/js/config.js @@ -14,7 +14,7 @@ angular.module("cesium.config", []) "TIMEOUT": 4000, "DEBUG": false, "VERSION": "0.1.19", - "BUILD_DATE": "2016-06-22T13:02:21.415Z" + "BUILD_DATE": "2016-06-22T19:20:52.906Z" }) ; \ No newline at end of file diff --git a/www/js/services/wallet-services.js b/www/js/services/wallet-services.js index c019513bfdca814d8f32568478237704c1e4dc6f..40fe5e0bce92901884c6254a86c116cb3127bff8 100644 --- a/www/js/services/wallet-services.js +++ b/www/js/services/wallet-services.js @@ -10,7 +10,7 @@ angular.module('cesium.wallet.services', ['ngResource', 'cesium.bma.services', ' defaultSettings = { useRelative: true, - timeWarningExpire: 129600 /*TODO: =1.5j est-ce suffisant ?*/, + timeWarningExpire: 2592000 /*=30 days*/, useLocalStorage: false, rememberMe: false, node: BMA.node.url, @@ -81,7 +81,7 @@ angular.module('cesium.wallet.services', ['ngResource', 'cesium.bma.services', ' } }, - reduceTxAndPush = function(txArray, result, processedTxMap) { + reduceTxAndPush = function(txArray, result, processedTxMap, isPending) { if (!txArray || txArray.length === 0) { return; } @@ -94,14 +94,12 @@ angular.module('cesium.wallet.services', ['ngResource', 'cesium.bma.services', ' if (otherIssuer.length > 0) { otherIssuer = otherIssuer.substring(2); } - var otherReceiver = null; + var otherReceiver; + var outputBase; var amount = tx.outputs.reduce(function(sum, output) { var outputArray = output.split(':',3); - var outputAmount = parseInt(outputArray[0]); - var outputBase = parseInt(outputArray[1]); - if (outputBase > 0) { - alert("base > 0"); - } + outputBase = parseInt(outputArray[1]); + var outputAmount = (outputBase > 0) ? parseInt(outputArray[0]) * Math.pow(10, outputBase) : parseInt(outputArray[0]); var outputCondArray = outputArray[2].split('(', 3); var outputPubkey = (outputCondArray.length == 2 && outputCondArray[0] == 'SIG') ? outputCondArray[1].substring(0,outputCondArray[1].length-1) : ''; @@ -133,17 +131,24 @@ angular.module('cesium.wallet.services', ['ngResource', 'cesium.bma.services', ' var txKey = amount + ':' + tx.hash + ':' + time; if (!processedTxMap[txKey] && amount !== 0) { processedTxMap[txKey] = true; - + var isValid = true; + // FIXME : check is input are in available sources + //if (isPending && walletIsIssuer) { + // isValid = (tx.inputs.length === tx.inputs.reduce(function(sum, input) { + // return (data.sources[input] !== undefined) ? sum+1 : sum; + // }, 0)); + //} result.push({ - time: time, - amount: amount, - pubkey: pubkey, - uid: (member ? member.uid : null), - comment: tx.comment, - isUD: false, - hash: tx.hash, - locktime: tx.locktime, - block_number: tx.block_number + time: time, + amount: amount, + pubkey: pubkey, + uid: (member ? member.uid : null), + comment: tx.comment, + isUD: false, + hash: tx.hash, + locktime: tx.locktime, + block_number: tx.block_number, + valid: isValid }); } }); @@ -364,10 +369,10 @@ angular.module('cesium.wallet.services', ['ngResource', 'cesium.bma.services', ' BMA.tx.history.all({pubkey: data.pubkey}) .then(function(res){ var processedTxMap = {}; - reduceTxAndPush(res.history.sent, txList, processedTxMap); - reduceTxAndPush(res.history.received, txList, processedTxMap); - reduceTxAndPush(res.history.sending, txList, processedTxMap); - reduceTxAndPush(res.history.pending, txList, processedTxMap); + reduceTxAndPush(res.history.sent, txList, processedTxMap, false); + reduceTxAndPush(res.history.received, txList, processedTxMap, false); + reduceTxAndPush(res.history.sending, txList, processedTxMap, false); + reduceTxAndPush(res.history.pending, txList, processedTxMap, true); })); // get UD history var udList = []; @@ -377,10 +382,7 @@ angular.module('cesium.wallet.services', ['ngResource', 'cesium.bma.services', ' .then(function(res){ udList = !res.history || !res.history.history ? [] : res.history.history.reduce(function(res, ud){ - var amount = ud.amount; - if(ud.base > 0) { - amount = amount * Math.pow(10, ud.base); - } + var amount = (ud.base > 0) ? ud.amount * Math.pow(10, ud.base) : ud.amount; return res.concat({ time: ud.time, amount: amount, @@ -395,7 +397,7 @@ angular.module('cesium.wallet.services', ['ngResource', 'cesium.bma.services', ' .then(function(){ // sort by time desc data.history = txList.concat(udList).sort(function(tx1, tx2) { - return tx2.time - tx1.time; + return (tx2.time - tx1.time); }); resolve(); }) @@ -430,11 +432,11 @@ angular.module('cesium.wallet.services', ['ngResource', 'cesium.bma.services', ' var lastBlockWithUD = res.result.blocks[res.result.blocks.length - 1]; return BMA.blockchain.block({ block: lastBlockWithUD }) .then(function(block){ - var currenUD = block.dividend; + var currentUD = block.dividend; if (block.unitbase > 0) { - currenUD = currenUD * Math.pow(10, block.unitbase); + currentUD = currentUD * Math.pow(10, block.unitbase); } - data.currentUD = currenUD; + data.currentUD = currentUD; resolve(); }) .catch(function(err) { @@ -483,23 +485,28 @@ angular.module('cesium.wallet.services', ['ngResource', 'cesium.bma.services', ' // Get members loadMembers(), - // Get sources - loadSources(), - // Get requirements loadRequirements(), - // Get transactions - loadTransactions() + // Get sources + loadSources() ]) .then(function() { - data.requirements.needCertificationCount = (!data.requirements.needMembership && (data.requirements.certificationCount < data.parameters.sigQty)) ? - (data.parameters.sigQty - data.requirements.certificationCount) : 0; - data.requirements.willNeedCertificationCount = (!data.requirements.needMembership && - data.requirements.needCertificationCount === 0 && (data.requirements.certificationCount - data.requirements.willExpireCertificationCount) < data.parameters.sigQty) ? - (data.parameters.sigQty - data.requirements.certificationCount - willExpireCertificationCount) : 0; - data.loaded = true; - resolve(data); + // Get transactions + loadTransactions() + .then(function(){ + data.requirements.needCertificationCount = (!data.requirements.needMembership && (data.requirements.certificationCount < data.parameters.sigQty)) ? + (data.parameters.sigQty - data.requirements.certificationCount) : 0; + data.requirements.willNeedCertificationCount = (!data.requirements.needMembership && + data.requirements.needCertificationCount === 0 && (data.requirements.certificationCount - data.requirements.willExpireCertificationCount) < data.parameters.sigQty) ? + (data.parameters.sigQty - data.requirements.certificationCount - willExpireCertificationCount) : 0; + data.loaded = true; + resolve(data); + }) + .catch(function(err) { + data.loaded = false; + reject(err); + }); }) .catch(function(err) { data.loaded = false; @@ -509,25 +516,28 @@ angular.module('cesium.wallet.services', ['ngResource', 'cesium.bma.services', ' }, refreshData = function() { - return $q(function(resolve, reject){ - $q.all([ - - // Get UDs - loadUDs(), + return $q(function(resolve, reject){ + $q.all([ - // Get requirements - loadRequirements(), + // Get UDs + loadUDs(), - // Get sources - loadSources(), + // Get requirements + loadRequirements(), - // Get transactions - loadTransactions() - ]) - .then(function() { + // Get sources + loadSources() + ]) + .then(function() { + // Get transactions (after sources) + loadTransactions() + .then(function(){ resolve(data); - }).catch(function(err){reject(err);}); - }); + }) + .catch(function(err){reject(err);});; + }) + .catch(function(err){reject(err);}); + }); }, /** @@ -561,6 +571,7 @@ angular.module('cesium.wallet.services', ['ngResource', 'cesium.bma.services', ' tx += data.pubkey + "\n"; tx += "Inputs:\n"; var sourceAmount = 0; + var minInputBase = 0; var outputBase = 0; var inputs = []; var i; @@ -570,21 +581,23 @@ angular.module('cesium.wallet.services', ['ngResource', 'cesium.bma.services', ' // if D : D:PUBLIC_KEY:BLOCK_ID // if T : T:T_HASH:T_INDEX tx += input.type+":"+input.identifier+":"+input.noffset+"\n"; - if (input.unit > 0) { - sourceAmount += input.amount * Math.pow(10, input.unit); - } - else { - sourceAmount += input.amount; - } - if (input.base > outputBase) { - outputBase = input.base; - } + sourceAmount += (input.unit > 0) ? (input.amount * Math.pow(10, input.unit)) : input.amount; + outputBase = (input.base > outputBase) ? input.base : outputBase; + minInputBase = (input.base > outputBase) ? input.base : minInputBase; inputs.push(input); if (sourceAmount >= amount) { break; } } } + // FIXME: Fix - make sure to get a round amount + // check is last digit is zero + //if (minInputBase < outputBase) { + // var outputPow = Math.pow(10, outputBase); + // var inputPow = Math.pow(10, minInputBase); + // var lastDigit = sourceAmount - Math.floor(sourceAmount / outputPow) * outputPow + // outputBase - minInputBase + //} if (sourceAmount < amount) { if (sourceAmount === 0) { diff --git a/www/templates/wallet/view_wallet.html b/www/templates/wallet/view_wallet.html index ea5e3577a47474f67040c6fbffb817cb64d38d96..c6fdc9c83e1ac14959edb3cf3384b0e0e8168319 100644 --- a/www/templates/wallet/view_wallet.html +++ b/www/templates/wallet/view_wallet.html @@ -113,14 +113,16 @@ <span class="item ink" ng-repeat="tx in walletData.history" ng-if="walletData.history && walletData.history.length > 0"> <h2> - <i class="icon ion-clock" ng-if="!tx.block_number"> </i> - <span class="positive" ng-if="tx.uid" ui-sref="app.view_identity({pub:tx.pubkey})"> - <i class="icon ion-person"></i> - {{::tx.uid}} - </span> - <span class="positive" ng-if="!tx.uid && !tx.isUD" ui-sref="app.view_identity({pub:tx.pubkey})"> - <i class="icon ion-key"></i> - {{::tx.pubkey | formatPubkey}} + <i class="icon" ng-if="!tx.block_number" ng-class="{'ion-clock': tx.valid, 'ion-minus-circled assertive': !tx.valid}"> </i> + <span ui-sref="app.view_identity({pub:tx.pubkey})" class="positive"> + <span ng-if="tx.uid"> + <i class="icon ion-person"></i> + {{::tx.uid}} + </span> + <span ng-if="!tx.uid && !tx.isUD"> + <i class="icon ion-key"></i> + {{::tx.pubkey | formatPubkey}} + </span> </span> <span class="dark" ng-if="tx.isUD"> <i class="icon ion-arrow-up-c"></i>