Added callback mechanism and updated UI

* UI Now updates when a new block has been broadcasted
* Added a on, off and trigger
pull/34/head
obscuren 11 years ago
parent c535d0d246
commit bbde892d50
  1. 65
      ethereal/assets/ethereum.js
  2. 1
      ethereal/assets/qml/newTransaction/_new_contract.qml
  3. 2
      ethereal/assets/qml/wallet.qml
  4. 4
      ethereal/assets/qml/webapp.qml
  5. 11
      ethereal/assets/test.html

@ -6,7 +6,7 @@ function postData(data, cb) {
}
if(data.args === undefined) {
data.args = []
data.args = [];
}
navigator.qt.postMessage(JSON.stringify(data));
@ -24,11 +24,11 @@ window.eth = {
getBlock: function(numberOrHash, cb) {
var func;
if(typeof numberOrHash == "string") {
func = "getBlockByHash"
func = "getBlockByHash";
} else {
func = "getBlockByNumber"
func = "getBlockByNumber";
}
postData({call: func, args: [numberOrHash]}, cb)
postData({call: func, args: [numberOrHash]}, cb);
},
// Create transaction
@ -36,18 +36,51 @@ window.eth = {
// Creates a transaction with the current account
// If no recipient is set, the Ethereum API will see it as a contract creation
createTx: function(recipient, value, gas, gasPrice, data, cb) {
postData({call: "createTx", args: [recipient, value, gas, gasPrice, data]}, cb)
postData({call: "createTx", args: [recipient, value, gas, gasPrice, data]}, cb);
},
getStorage: function(address, storageAddress, cb) {
postData({call: "getStorage", args: [address, storageAddress]}, cb)
postData({call: "getStorage", args: [address, storageAddress]}, cb);
},
getKey: function(cb) {
postData({call: "getKey"}, cb)
postData({call: "getKey"}, cb);
},
on: function(event, cb) {
if(eth._onCallbacks[event] === undefined) {
eth._onCallbacks[event] = [];
}
eth._onCallbacks[event].push(cb);
return this
},
off: function(event, cb) {
if(eth._onCallbacks[event] !== undefined) {
var callbacks = eth._onCallbacks[event];
for(var i = 0; i < callbacks.length; i++) {
if(callbacks[i] === cb) {
delete callbacks[i];
}
}
}
return this
},
trigger: function(event, data) {
var callbacks = eth._onCallbacks[event];
if(callbacks !== undefined) {
for(var i = 0; i < callbacks.length; i++) {
callbacks[i](data);
}
}
},
}
window.eth._callbacks = {}
window.eth._onCallbacks = {}
function debug(/**/) {
var args = arguments;
@ -66,13 +99,17 @@ function debug(/**/) {
navigator.qt.onmessage = function(ev) {
var data = JSON.parse(ev.data)
if(data._seed) {
var cb = eth._callbacks[data._seed];
if(cb) {
// Call the callback
cb(data.data);
// Remove the "trigger" callback
delete eth._callbacks[ev._seed];
if(data._event !== undefined) {
eth.trigger(data._event, data.data);
} else {
if(data._seed) {
var cb = eth._callbacks[data._seed];
if(cb) {
// Call the callback
cb(data.data);
// Remove the "trigger" callback
delete eth._callbacks[ev._seed];
}
}
}
}

@ -117,6 +117,7 @@ Component {
TextArea {
id: codeView
height: 300
anchors.topMargin: 5
Layout.fillWidth: true
width: parent.width /2

@ -18,13 +18,11 @@ ApplicationWindow {
MenuBar {
Menu {
title: "File"
/*
MenuItem {
text: "Import App"
shortcut: "Ctrl+o"
onTriggered: openAppDialog.open()
}
*/
}
Menu {

@ -79,6 +79,10 @@ ApplicationWindow {
function postData(seed, data) {
webview.experimental.postMessage(JSON.stringify({data: data, _seed: seed}))
}
function onNewBlockCb(block) {
webview.experimental.postMessage(JSON.stringify({data: block, _event: "block:new"}))
}
}
Rectangle {

@ -23,11 +23,16 @@ function tests() {
function init() {
eth.getKey(function(key) {
eth.getStorage(jefcoinAddr, key, function(storage) {
document.querySelector("#currentAmount").innerHTML = "Amount: " + storage;
});
eth.on("block:new", function() {
eth.getStorage(jefcoinAddr, key, function(storage) {
debug("Currently in storage: ", storage);
document.querySelector("#currentAmount").innerHTML = "Amount: " + storage;
})
})
});
});
});
}
</script>

Loading…
Cancel
Save