+ basic address book support

+ notify of new transactions
+ refresh transactions
! fixed a lot of transactions bugs
This commit is contained in:
Taegus
2018-12-26 10:12:42 +01:00
parent 655cd441b7
commit 3315677ede
13 changed files with 382 additions and 46 deletions

159
renderer/addressBook.js Normal file
View File

@@ -0,0 +1,159 @@
const {ipcRenderer} = require('electron');
class AddressBook {
constructor() {
}
setAddressName(address, name) {
console.log(address);
console.log(name);
var addressBook = ipcRenderer.sendSync('getJSONFile', 'addresses.json');
if (!addressBook) {
addressBook = { names: {} };
}
// set the wallet name from the dialog box
addressBook.names[address] = name;
ipcRenderer.sendSync('setJSONFile',
{
file: 'addresses.json',
data: addressBook
});
}
getAddressName(address) {
var addressBook = ipcRenderer.sendSync('getJSONFile', 'addresses.json');
if (!addressBook) {
addressBook = { names: {} };
}
// set the wallet name from the dialog box
return addressBook.names[address] || "";
}
getAddressList() {
var addressBook = ipcRenderer.sendSync('getJSONFile', 'addresses.json');
if (!addressBook) {
addressBook = { names: {} };
}
return addressBook.names;
}
deleteAddress(address) {
var addressBook = ipcRenderer.sendSync('getJSONFile', 'addresses.json');
if (!addressBook) {
addressBook = { names: {} };
} else {
delete addressBook.names[address];
}
ipcRenderer.sendSync('setJSONFile',
{
file: 'addresses.json',
data: addressBook
});
}
enableButtonTooltips() {
}
renderAddressBook() {
var addressObject = EthoAddressBook.getAddressList();
var renderData = { addressData: [] };
for (var key in addressObject) {
if (addressObject.hasOwnProperty(key)) {
var addressEntry = {};
addressEntry.name = addressObject[key];
addressEntry.address = key;
renderData.addressData.push(addressEntry);
}
}
// render the wallets current state
EthoMainGUI.renderTemplate("addressBook.html", renderData);
$(document).trigger("render_addressBook");
EthoAddressBook.enableButtonTooltips();
}
}
// the event to tell us that the wallets are rendered
$(document).on("render_addressBook", function() {
$("#btnNewAddress").off('click').on('click', function() {
$("#dlgCreateAddressAndName").iziModal();
$("#addressName").val("");
$("#addressHash").val("");
$('#dlgCreateAddressAndName').iziModal('open');
function doCreateNewWallet() {
$('#dlgCreateAddressAndName').iziModal('close');
EthoAddressBook.setAddressName($("#addressHash").val(), $("#addressName").val());
EthoAddressBook.renderAddressBook();
iziToast.success({
title: 'Created',
message: 'New address was successfully created',
position: 'topRight',
timeout: 5000
});
}
$("#btnCreateAddressConfirm").off('click').on('click', function() {
doCreateNewWallet();
});
$("#dlgCreateAddressAndName").off('keypress').on('keypress', function(e) {
if(e.which == 13) {
doCreateNewWallet();
}
});
});
$(".btnChangAddressName").off('click').on('click', function() {
var walletAddress = $(this).attr('data-address');
var walletName = $(this).attr('data-name');
$("#dlgChangeAddressName").iziModal();
$("#inputAddressName").val(walletName);
$('#dlgChangeAddressName').iziModal('open');
function doChangeAddressName() {
EthoAddressBook.setAddressName(walletAddress, $("#inputAddressName").val());
$('#dlgChangeAddressName').iziModal('close');
EthoAddressBook.renderAddressBook();
}
$("#btnChangeAddressNameConfirm").off('click').on('click', function() {
doChangeAddressName();
});
$("#dlgChangeAddressName").off('keypress').on('keypress', function(e) {
if(e.which == 13) {
doChangeAddressName();
}
});
});
$(".btnDeleteAddress").off('click').on('click', function() {
$("#dlgDeleteAddressConfirm").iziModal();
$('#dlgDeleteAddressConfirm').iziModal('open');
$("#btnDeleteAddressCancel").off('click').on('click', function() {
$('#dlgDeleteAddressConfirm').iziModal('close');
});
$("#btnDeleteAddressConfirm").off('click').on('click', function() {
EthoAddressBook.deleteAddress($(this).attr('data-address'));
$('#dlgDeleteAddressConfirm').iziModal('close');
EthoAddressBook.renderAddressBook();
});
});
});
EthoAddressBook = new AddressBook();

View File

@@ -14,7 +14,10 @@ class MainGUI {
case "account":
$("#mainNavBtnWalletsWrapper").addClass("iconSelected");
break;
case "send":
case "addressBook":
$("#mainNavBtnAddressBoookWrapper").addClass("iconSelected");
break;
case "send":
$("#mainNavBtnSendWrapper").addClass("iconSelected");
break;
case "transactions":
@@ -69,6 +72,11 @@ $("#mainNavBtnTransactions").click(function() {
EthoTransactions.renderTransactions();
});
$("#mainNavBtnAddressBoook").click(function() {
EthoMainGUI.changeAppState("addressBook");
EthoAddressBook.renderAddressBook();
});
$("#mainNavBtnSend").click(function() {
EthoMainGUI.changeAppState("send");
EthoSend.renderSendState();

View File

@@ -79,7 +79,7 @@ $(document).on("render_send", function() {
},
function(data) {
$("#dlgAddressList").iziModal({ width: "800px" });
EthoMainGUI.renderTemplate("addresslist.html", data, $("#dlgAddressListBody"));
EthoMainGUI.renderTemplate("addressList.html", data, $("#dlgAddressListBody"));
$('#dlgAddressList').iziModal('open');
$(".btnSelectToAddress").off('click').on('click', function() {

View File

@@ -7,12 +7,13 @@ class tableTransactions {
// register the sort datetime format
$.fn.dataTable.moment('MMM Do YYYY HH:mm:ss');
var namesType = $.fn.dataTable.absoluteOrder(
var namesType = $.fn.dataTable.absoluteOrderNumber(
[
{ value: null, position: 'top' }
]);
// render the transactions
$(id).DataTable({
"dom": 'Bfrtip',
"paging": false,
"scrollY": "calc(100vh - 115px)",
"responsive": true,
@@ -20,6 +21,15 @@ class tableTransactions {
"order": [[ 1, "desc" ]],
"data": data,
"oSearch": {"sSearch": EthoTransactions.getFilter() },
"buttons":
[
{
text: 'Refresh',
action: function ( e, dt, node, config ) {
EthoTransactions.renderTransactions();
}
}
],
"columnDefs": [
{
"targets": 0,

View File

@@ -119,22 +119,33 @@ $(document).on("onSyncInterval", function() {
counters = {};
}
function finalizeCounters(lastBlock) {
counters.transactions = lastBlock;
ipcRenderer.sendSync('setJSONFile',
{
file: 'counters.json',
data: counters
});
}
function doSyncRemainingBlocks() {
EthoBlockchain.getBlock("latest", false,
function(error) {
EthoMainGUI.showGeneralError(error);
},
function(block) {
var lastBlock = counters.transactions || 0;
var lastBlock = counters.transactions || 1;
if (lastBlock < block.number) {
function getNextBlockTransactions(blockNumber, maxBlock) {
EthoBlockchain.getBlock(blockNumber, true,
function(error) {
EthoMainGUI.showGeneralError(error);
},
function(data) {
if (blockNumber < maxBlock) {
if (blockNumber < maxBlock) {
EthoBlockchain.getBlock(blockNumber, true,
function(error) {
EthoMainGUI.showGeneralError(error);
getNextBlockTransactions(blockNumber + 1 , maxBlock);
},
function(data) {
if (data.transactions) {
data.transactions.forEach(element => {
if ((EthoWallets.getAddressExists(element.from)) || (EthoWallets.getAddressExists(element.to))) {
@@ -151,34 +162,33 @@ $(document).on("onSyncInterval", function() {
ipcRenderer.send('storeTransaction', Transaction);
$(document).trigger("onNewAccountTransaction");
if (EthoMainGUI.getAppState() == "transactions") {
//$('#tableTransactionsForAll').DataTable().ajax.reload();
}
iziToast.info({
title: 'New Transaction',
message: vsprintf('Transaction from address %s to address %s was just processed', [Transaction.fromaddr, Transaction.toaddr]),
position: 'topRight',
timeout: 10000
});
}
});
});
}
// call the next iteration for the next block
getNextBlockTransactions(blockNumber + 1 , maxBlock)
} else {
setTimeout(function() {
doSyncRemainingBlocks();
}, 10000);
getNextBlockTransactions(blockNumber + 1 , maxBlock);
}
}
);
);
} else {
finalizeCounters(blockNumber);
setTimeout(function() {
doSyncRemainingBlocks();
}, 10000);
}
}
// call initial call of function
getNextBlockTransactions(lastBlock, block.number);
} else {
counters.transactions = block.number;
ipcRenderer.sendSync('setJSONFile',
{
file: 'counters.json',
data: counters
});
finalizeCounters(lastBlock);
setTimeout(function() {
doSyncRemainingBlocks();