Commit 465b0a79 authored by obscuren's avatar obscuren

Updated browser & pass view to callback function

parent 87f50659
...@@ -9,9 +9,9 @@ import Ethereum 1.0 ...@@ -9,9 +9,9 @@ import Ethereum 1.0
Rectangle { Rectangle {
id: window id: window
objectName: "browserView" objectName: "browserView"
anchors.fill: parent anchors.fill: parent
color: "#00000000" color: "#00000000"
property var title: "Browser" property var title: "Browser"
property var iconSource: "../browser.png" property var iconSource: "../browser.png"
...@@ -139,311 +139,324 @@ Rectangle { ...@@ -139,311 +139,324 @@ Rectangle {
} }
} }
// Border // Border
Rectangle { Rectangle {
id: divider id: divider
anchors { anchors {
left: parent.left left: parent.left
right: parent.right right: parent.right
top: navBar.bottom top: navBar.bottom
} }
z: -1 z: -1
height: 1 height: 1
color: "#CCCCCC" color: "#CCCCCC"
} }
WebView { ScrollView {
objectName: "webView"
id: webview
anchors { anchors {
left: parent.left left: parent.left
right: parent.right right: parent.right
bottom: parent.bottom bottom: parent.bottom
top: divider.bottom top: divider.bottom
} }
WebView {
objectName: "webView"
id: webview
anchors.fill: parent
function injectJs(js) { function injectJs(js) {
webview.experimental.navigatorQtObjectEnabled = true; webview.experimental.navigatorQtObjectEnabled = true;
webview.experimental.evaluateJavaScript(js) webview.experimental.evaluateJavaScript(js)
webview.experimental.javascriptEnabled = true; webview.experimental.javascriptEnabled = true;
} }
function sendMessage(data) { function sendMessage(data) {
webview.experimental.postMessage(JSON.stringify(data)) webview.experimental.postMessage(JSON.stringify(data))
} }
Component.onCompleted: {
for (var i in experimental.preferences) {
console.log(i)
}
}
experimental.preferences.javascriptEnabled: true experimental.preferences.javascriptEnabled: true
experimental.preferences.webGLEnabled: true experimental.preferences.webAudioEnabled: true
experimental.itemSelector: MouseArea { experimental.preferences.pluginsEnabled: true
// To avoid conflicting with ListView.model when inside Initiator context. experimental.preferences.navigatorQtObjectEnabled: true
property QtObject selectorModel: model experimental.preferences.developerExtrasEnabled: true
anchors.fill: parent experimental.preferences.webGLEnabled: true
onClicked: selectorModel.reject() experimental.preferences.notificationsEnabled: true
experimental.preferences.localStorageEnabled: true
Menu { experimental.userAgent:"Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Mist/0.1 Safari/537.36"
visible: true
id: itemSelector experimental.itemSelector: MouseArea {
// To avoid conflicting with ListView.model when inside Initiator context.
Instantiator { property QtObject selectorModel: model
model: selectorModel.items anchors.fill: parent
delegate: MenuItem { onClicked: selectorModel.reject()
text: model.text
onTriggered: { Menu {
selectorModel.accept(index) visible: true
id: itemSelector
Instantiator {
model: selectorModel.items
delegate: MenuItem {
text: model.text
onTriggered: {
selectorModel.accept(index)
}
} }
onObjectAdded: itemSelector.insertItem(index, object)
onObjectRemoved: itemSelector.removeItem(object)
} }
onObjectAdded: itemSelector.insertItem(index, object)
onObjectRemoved: itemSelector.removeItem(object)
} }
}
Component.onCompleted: { Component.onCompleted: {
itemSelector.popup() itemSelector.popup()
}
} }
} experimental.userScripts: ["../ext/q.js", "../ext/ethereum.js/lib/web3.js", "../ext/ethereum.js/lib/qt.js", "../ext/setup.js"]
experimental.preferences.webAudioEnabled: true experimental.onMessageReceived: {
experimental.preferences.navigatorQtObjectEnabled: true console.log("[onMessageReceived]: ", message.data)
experimental.preferences.developerExtrasEnabled: true // TODO move to messaging.js
experimental.userScripts: ["../ext/q.js", "../ext/ethereum.js/lib/web3.js", "../ext/ethereum.js/lib/qt.js", "../ext/setup.js"] var data = JSON.parse(message.data)
experimental.onMessageReceived: {
console.log("[onMessageReceived]: ", message.data)
// TODO move to messaging.js
var data = JSON.parse(message.data)
try { try {
switch(data.call) { switch(data.call) {
case "eth_compile": case "eth_compile":
postData(data._id, eth.compile(data.args[0])) postData(data._id, eth.compile(data.args[0]))
break break
case "eth_coinbase": case "eth_coinbase":
postData(data._id, eth.coinBase()) postData(data._id, eth.coinBase())
case "eth_account": case "eth_account":
postData(data._id, eth.key().address); postData(data._id, eth.key().address);
case "eth_istening": case "eth_istening":
postData(data._id, eth.isListening()) postData(data._id, eth.isListening())
break break
case "eth_mining": case "eth_mining":
postData(data._id, eth.isMining()) postData(data._id, eth.isMining())
break break
case "eth_peerCount": case "eth_peerCount":
postData(data._id, eth.peerCount()) postData(data._id, eth.peerCount())
break break
case "eth_countAt": case "eth_countAt":
require(1) require(1)
postData(data._id, eth.txCountAt(data.args[0])) postData(data._id, eth.txCountAt(data.args[0]))
break break
case "eth_codeAt": case "eth_codeAt":
require(1) require(1)
var code = eth.codeAt(data.args[0]) var code = eth.codeAt(data.args[0])
postData(data._id, code); postData(data._id, code);
break break
case "eth_blockByNumber": case "eth_blockByNumber":
require(1) require(1)
var block = eth.blockByNumber(data.args[0]) var block = eth.blockByNumber(data.args[0])
postData(data._id, block) postData(data._id, block)
break break
case "eth_blockByHash": case "eth_blockByHash":
require(1) require(1)
var block = eth.blockByHash(data.args[0]) var block = eth.blockByHash(data.args[0])
postData(data._id, block) postData(data._id, block)
break break
require(2) require(2)
var block = eth.blockByHash(data.args[0]) var block = eth.blockByHash(data.args[0])
postData(data._id, block.transactions[data.args[1]]) postData(data._id, block.transactions[data.args[1]])
break break
case "eth_transactionByHash": case "eth_transactionByHash":
case "eth_transactionByNumber": case "eth_transactionByNumber":
require(2) require(2)
var block; var block;
if (data.call === "transactionByHash") if (data.call === "transactionByHash")
block = eth.blockByHash(data.args[0]) block = eth.blockByHash(data.args[0])
else else
block = eth.blockByNumber(data.args[0]) block = eth.blockByNumber(data.args[0])
var tx = block.transactions.get(data.args[1]) var tx = block.transactions.get(data.args[1])
postData(data._id, tx) postData(data._id, tx)
break break
case "eth_uncleByHash": case "eth_uncleByHash":
case "eth_uncleByNumber": case "eth_uncleByNumber":
require(2) require(2)
var block; var block;
if (data.call === "uncleByHash") if (data.call === "uncleByHash")
block = eth.blockByHash(data.args[0]) block = eth.blockByHash(data.args[0])
else else
block = eth.blockByNumber(data.args[0]) block = eth.blockByNumber(data.args[0])
var uncle = block.uncles.get(data.args[1]) var uncle = block.uncles.get(data.args[1])
postData(data._id, uncle) postData(data._id, uncle)
break break
case "transact": case "transact":
require(5) require(5)
var tx = eth.transact(data.args) var tx = eth.transact(data.args)
postData(data._id, tx) postData(data._id, tx)
break break
case "eth_stateAt": case "eth_stateAt":
require(2); require(2);
var storage = eth.storageAt(data.args[0], data.args[1]); var storage = eth.storageAt(data.args[0], data.args[1]);
postData(data._id, storage) postData(data._id, storage)
break break
case "eth_call": case "eth_call":
require(1); require(1);
var ret = eth.call(data.args) var ret = eth.call(data.args)
postData(data._id, ret) postData(data._id, ret)
break break
case "eth_balanceAt": case "eth_balanceAt":
require(1); require(1);
postData(data._id, eth.balanceAt(data.args[0])); postData(data._id, eth.balanceAt(data.args[0]));
break break
case "eth_watch": case "eth_watch":
require(2) require(2)
eth.watch(data.args[0], data.args[1]) eth.watch(data.args[0], data.args[1])
case "eth_disconnect": case "eth_disconnect":
require(1) require(1)
postData(data._id, null) postData(data._id, null)
break; break;
case "eth_newFilterString": case "eth_newFilterString":
require(1) require(1)
var id = eth.newFilterString(data.args[0]) var id = eth.newFilterString(data.args[0])
postData(data._id, id); postData(data._id, id);
break; break;
case "eth_newFilter": case "eth_newFilter":
require(1) require(1)
var id = eth.newFilter(data.args[0]) var id = eth.newFilter(data.args[0])
postData(data._id, id); postData(data._id, id);
break; break;
case "eth_filterLogs": case "eth_filterLogs":
require(1); require(1);
var messages = eth.messages(data.args[0]); var messages = eth.messages(data.args[0]);
var m = JSON.parse(JSON.parse(JSON.stringify(messages))) var m = JSON.parse(JSON.parse(JSON.stringify(messages)))
postData(data._id, m); postData(data._id, m);
break; break;
case "eth_deleteFilter": case "eth_deleteFilter":
require(1); require(1);
eth.uninstallFilter(data.args[0]) eth.uninstallFilter(data.args[0])
break; break;
case "shh_newFilter": case "shh_newFilter":
require(1); require(1);
var id = shh.watch(data.args[0], window); var id = shh.watch(data.args[0], window);
postData(data._id, id); postData(data._id, id);
break; break;
case "shh_newIdentity": case "shh_newIdentity":
var id = shh.newIdentity() var id = shh.newIdentity()
postData(data._id, id) postData(data._id, id)
break break
case "shh_post": case "shh_post":
require(1); require(1);
var params = data.args[0]; var params = data.args[0];
var fields = ["payload", "to", "from"]; var fields = ["payload", "to", "from"];
for(var i = 0; i < fields.length; i++) { for(var i = 0; i < fields.length; i++) {
params[fields[i]] = params[fields[i]] || ""; params[fields[i]] = params[fields[i]] || "";
} }
if(typeof params.payload !== "object") { params.payload = [params.payload]; } //params.payload = params.payload.join(""); } if(typeof params.payload !== "object") { params.payload = [params.payload]; } //params.payload = params.payload.join(""); }
params.topics = params.topics || []; params.topics = params.topics || [];
params.priority = params.priority || 1000; params.priority = params.priority || 1000;
params.ttl = params.ttl || 100; params.ttl = params.ttl || 100;
shh.post(params.payload, params.to, params.from, params.topics, params.priority, params.ttl); shh.post(params.payload, params.to, params.from, params.topics, params.priority, params.ttl);
break; break;
case "shh_getMessages": case "shh_getMessages":
require(1); require(1);
var m = shh.messages(data.args[0]); var m = shh.messages(data.args[0]);
var messages = JSON.parse(JSON.parse(JSON.stringify(m))); var messages = JSON.parse(JSON.parse(JSON.stringify(m)));
postData(data._id, messages); postData(data._id, messages);
break; break;
case "ssh_newGroup": case "ssh_newGroup":
postData(data._id, ""); postData(data._id, "");
break; break;
} }
} catch(e) { } catch(e) {
console.log(data.call + ": " + e) console.log(data.call + ": " + e)
postData(data._id, null); postData(data._id, null);
}
} }
}
function post(seed, data) { function post(seed, data) {
postData(data._id, data) postData(data._id, data)
} }
function require(args, num) { function require(args, num) {
if(args.length < num) { if(args.length < num) {
throw("required argument count of "+num+" got "+args.length); throw("required argument count of "+num+" got "+args.length);
}
}
function postData(seed, data) {
webview.experimental.postMessage(JSON.stringify({data: data, _id: seed}))
}
function postEvent(event, id, data) {
webview.experimental.postMessage(JSON.stringify({data: data, _id: id, _event: event}))
} }
}
function postData(seed, data) {
webview.experimental.postMessage(JSON.stringify({data: data, _id: seed}))
}
function postEvent(event, id, data) {
webview.experimental.postMessage(JSON.stringify({data: data, _id: id, _event: event}))
}
function onWatchedCb(data, id) { function onWatchedCb(data, id) {
var messages = JSON.parse(data) var messages = JSON.parse(data)
postEvent("watched:"+id, messages) postEvent("watched:"+id, messages)
} }
function onNewBlockCb(block) { function onNewBlockCb(block) {
postEvent("block:new", block) postEvent("block:new", block)
} }
function onObjectChangeCb(stateObject) { function onObjectChangeCb(stateObject) {
postEvent("object:"+stateObject.address(), stateObject) postEvent("object:"+stateObject.address(), stateObject)
} }
function onStorageChangeCb(storageObject) { function onStorageChangeCb(storageObject) {
var ev = ["storage", storageObject.stateAddress, storageObject.address].join(":"); var ev = ["storage", storageObject.stateAddress, storageObject.address].join(":");
postEvent(ev, [storageObject.address, storageObject.value]) postEvent(ev, [storageObject.address, storageObject.value])
}
} }
} }
......
...@@ -312,10 +312,11 @@ func (self *UiLib) ToAscii(data string) string { ...@@ -312,10 +312,11 @@ func (self *UiLib) ToAscii(data string) string {
} }
/// Ethereum filter methods /// Ethereum filter methods
func (self *UiLib) NewFilter(object map[string]interface{}) (id int) { func (self *UiLib) NewFilter(object map[string]interface{}, view *qml.Common) (id int) {
filter := qt.NewFilterFromMap(object, self.eth) filter := qt.NewFilterFromMap(object, self.eth)
filter.MessageCallback = func(messages state.Messages) { filter.MessageCallback = func(messages state.Messages) {
self.win.Root().Call("invokeFilterCallback", xeth.ToJSMessages(messages), id) view.Call("messages", xeth.ToJSMessages(messages), id)
//self.win.Root().Call("invokeFilterCallback", xeth.ToJSMessages(messages), id)
} }
id = self.filterManager.InstallFilter(filter) id = self.filterManager.InstallFilter(filter)
return id return id
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment