From 21c373b55dc8543fb97ebf3c66128506d4f74d0a Mon Sep 17 00:00:00 2001 From: Alexandre Van de Sande Date: Mon, 2 Mar 2015 18:39:07 -0300 Subject: [PATCH] Network Health Panel with mining --- cmd/mist/assets/ext/mist.js | 1 - cmd/mist/assets/qml/main.qml | 21 ++-- cmd/mist/assets/qml/views/miner.qml | 17 +-- cmd/mist/assets/qml/views/network.qml | 163 ++++++++++++++++++++++++++ cmd/mist/gui.go | 3 +- 5 files changed, 178 insertions(+), 27 deletions(-) create mode 100644 cmd/mist/assets/qml/views/network.qml diff --git a/cmd/mist/assets/ext/mist.js b/cmd/mist/assets/ext/mist.js index 2fc38cdfa..849e0804e 100644 --- a/cmd/mist/assets/ext/mist.js +++ b/cmd/mist/assets/ext/mist.js @@ -17,7 +17,6 @@ // this function is included locally, but you can also include separately via a header definition -console.log("loaded?"); document.onkeydown = function(evt) { // This functions keeps track of keyboard inputs in order to allow copy, paste and other features diff --git a/cmd/mist/assets/qml/main.qml b/cmd/mist/assets/qml/main.qml index 1f7fcbec6..f8c01e25c 100644 --- a/cmd/mist/assets/qml/main.qml +++ b/cmd/mist/assets/qml/main.qml @@ -46,12 +46,13 @@ ApplicationWindow { walletWeb.view.url = "http://ethereum-dapp-wallet.meteor.com/"; walletWeb.menuItem.title = "Wallet"; - addPlugin("./views/miner.qml", {noAdd: true, close: false, section: "ethereum", active: false}); + addPlugin("./views/miner.qml", {noAdd: true, close: false, section: "legacy", active: false}); + addPlugin("./views/network.qml", {noAdd: true, close: false, section: "ethereum", active: false}); - var whisperTab = addPlugin("./views/browser.qml", {noAdd: true, close: true, section: "ethereum", active: false}); + /* var whisperTab = addPlugin("./views/browser.qml", {noAdd: true, close: true, section: "ethereum", active: false}); whisperTab.view.url = "http://ethereum-dapp-whisper-client.meteor.com/"; whisperTab.menuItem.title = "Whisper Chat"; - +*/ addPlugin("./views/wallet.qml", {noAdd: true, close: false, section: "legacy"}); addPlugin("./views/transaction.qml", {noAdd: true, close: false, section: "legacy"}); addPlugin("./views/whisper.qml", {noAdd: true, close: false, section: "legacy"}); @@ -536,6 +537,8 @@ ApplicationWindow { Text { id: secondary + //only shows secondary title if there's no badge + visible: (badgeContent == "icon" || badgeContent == "number" )? false : true font.family: sourceSansPro.name font.weight: Font.Light anchors { @@ -730,18 +733,14 @@ ApplicationWindow { Rectangle { height: 19 color: "#00ff00" + visible: (menuApps.children.length > 0) + Text { text: "APPS" font.family: sourceSansPro.name font.weight: Font.Regular anchors.fill: parent anchors.leftMargin: 16 - - // anchors { - // left: parent.left - // top: parent.top - // leftMargin: 16 - // } color: "#AAA0A0" } } @@ -749,6 +748,8 @@ ApplicationWindow { ColumnLayout { id: menuApps spacing: 3 + + anchors { left: parent.left right: parent.right @@ -775,7 +776,7 @@ ApplicationWindow { ColumnLayout { id: menuLegacy - visible: false + visible: true spacing: 3 anchors { left: parent.left diff --git a/cmd/mist/assets/qml/views/miner.qml b/cmd/mist/assets/qml/views/miner.qml index e239c7d7b..4025ff485 100644 --- a/cmd/mist/assets/qml/views/miner.qml +++ b/cmd/mist/assets/qml/views/miner.qml @@ -19,20 +19,9 @@ Rectangle { id: lastBlockLabel objectName: "lastBlockLabel" text: "---" - onTextChanged: { - //menuItem.secondaryTitle = text - } - } - - Label { - objectName: "miningLabel" - visible: false - font.pixelSize: 10 - anchors.right: lastBlockLabel.left - anchors.rightMargin: 5 - onTextChanged: { - menuItem.secondaryTitle = text - } + onTextChanged: { + //menuItem.secondaryTitle = text + } } ColumnLayout { diff --git a/cmd/mist/assets/qml/views/network.qml b/cmd/mist/assets/qml/views/network.qml new file mode 100644 index 000000000..a628cc157 --- /dev/null +++ b/cmd/mist/assets/qml/views/network.qml @@ -0,0 +1,163 @@ +import QtQuick 2.0 +import QtQuick.Controls 1.0; +import QtQuick.Controls.Styles 1.0 +import QtQuick.Layouts 1.0; +import QtWebEngine 1.0 +import QtWebEngine.experimental 1.0 +import QtQuick.Window 2.0; +import Ethereum 1.0 +import Qt.WebSockets 1.0 +//import "qwebchannel.js" as WebChannel + + + +Rectangle { + id: window + anchors.fill: parent + color: "#00000000" + + property var title: "Network" + property var iconSource: "../mining-icon.png" + property var menuItem + property var hideUrl: true + + property alias url: webview.url + property alias windowTitle: webview.title + property alias webView: webview + + property var cleanPath: false + property var open: function(url) { + if(!window.cleanPath) { + var uri = url; + if(!/.*\:\/\/.*/.test(uri)) { + uri = "http://" + uri; + } + + var reg = /(^https?\:\/\/(?:www\.)?)([a-zA-Z0-9_\-]*\.eth)(.*)/ + + if(reg.test(uri)) { + uri.replace(reg, function(match, pre, domain, path) { + uri = pre; + + var lookup = eth.lookupDomain(domain.substring(0, domain.length - 4)); + var ip = []; + for(var i = 0, l = lookup.length; i < l; i++) { + ip.push(lookup.charCodeAt(i)) + } + + if(ip.length != 0) { + uri += lookup; + } else { + uri += domain; + } + + uri += path; + }); + } + + window.cleanPath = true; + + webview.url = uri; + + //uriNav.text = uri.text.replace(/(^https?\:\/\/(?:www\.)?)([a-zA-Z0-9_\-]*\.\w{2,3})(.*)/, "$1$2$3"); + uriNav.text = uri; + + } else { + // Prevent inf loop. + window.cleanPath = false; + } + } + + Label { + objectName: "miningLabel" + visible: false + font.pixelSize: 10 + anchors.right: lastBlockLabel.left + anchors.rightMargin: 5 + onTextChanged: { + menuItem.secondaryTitle = eth.miner().mining()? eth.miner().hashRate() + " Khash" : "" + } + } + + Item { + objectName: "root" + id: root + anchors.fill: parent + state: "inspectorShown" + + Timer { + interval: 1000; running: true; repeat: true + onTriggered: { + webview.runJavaScript("Miner.mining", function(miningSliderValue) { + + // Check if it's mining and set it accordingly + if (miningSliderValue > 0 && !eth.miner().mining()) { + eth.setGasPrice("10000000000000"); + + eth.miner().start(); + } else if (miningSliderValue == 0 && eth.miner().mining()) { + eth.miner().stop(); + } else if (eth.miner().mining()) { + + webview.runJavaScript('console.log(localStorage.timeSpent); Miner.timeSpentMining++; Miner.hashrate = ' + eth.miner().hashRate() ); + + + } else if (miningSliderValue == "undefined") { + + webview.runJavaScript('Miner.mining = 0' ); + + } + }); + + } + } + + WebEngineView { + objectName: "webView" + id: webview + anchors.fill: parent + + url: "http://localhost:3000/" + + experimental.settings.javascriptCanAccessClipboard: true + + + onJavaScriptConsoleMessage: { + console.log(sourceID + ":" + lineNumber + ":" + JSON.stringify(message)); + } + + onLoadingChanged: { + if (loadRequest.status == WebEngineView.LoadSucceededStatus) { + webview.runJavaScript(eth.readFile("mist.js")); + } + } + } + + + + + + + WebEngineView { + id: inspector + visible: false + z:10 + anchors { + left: root.left + right: root.right + top: root.top + bottom: root.bottom + } + + } + + states: [ + State { + name: "inspectorShown" + PropertyChanges { + target: inspector + } + } + ] + } +} diff --git a/cmd/mist/gui.go b/cmd/mist/gui.go index 4af0cff43..e4b7a7ccb 100644 --- a/cmd/mist/gui.go +++ b/cmd/mist/gui.go @@ -419,8 +419,7 @@ func (gui *Gui) update() { case <-generalUpdateTicker.C: statusText := "#" + gui.eth.ChainManager().CurrentBlock().Number().String() lastBlockLabel.Set("text", statusText) - miningLabel.Set("text", "Mining @ "+strconv.FormatInt(gui.uiLib.Miner().HashRate(), 10)+"/Khash") - + //miningLabel.Set("text", strconv.FormatInt(gui.uiLib.Miner().HashRate(), 10)) case <-statsUpdateTicker.C: gui.setStatsPane() }