2018-01-07 07:20:45 +02:00
// Copyright (c) 2014-2018, The Monero Project
2015-04-01 11:56:05 +03:00
//
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification, are
// permitted provided that the following conditions are met:
//
// 1. Redistributions of source code must retain the above copyright notice, this list of
// conditions and the following disclaimer.
//
// 2. Redistributions in binary form must reproduce the above copyright notice, this list
// of conditions and the following disclaimer in the documentation and/or other
// materials provided with the distribution.
//
// 3. Neither the name of the copyright holder nor the names of its contributors may be
// used to endorse or promote products derived from this software without specific
// prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2014-07-07 20:08:30 +03:00
import QtQuick 2.0
2016-12-28 23:20:05 +02:00
import QtQuick . Layouts 1.1
import QtQuick . Dialogs 1.2
import "../components"
import moneroComponents . Wallet 1.0
2014-07-07 20:08:30 +03:00
Rectangle {
2016-12-28 23:20:05 +02:00
id: root
color: "#F0EEEE"
property var currentHashRate: 0
2017-08-07 18:03:34 +03:00
function isDaemonLocal ( ) {
if ( appWindow . currentDaemonAddress === "" )
return false
var daemonHost = appWindow . currentDaemonAddress . split ( ":" ) [ 0 ]
if ( daemonHost === "127.0.0.1" || daemonHost === "localhost" )
return true
return false
}
2016-12-28 23:20:05 +02:00
/* main layout */
ColumnLayout {
id: mainLayout
2017-03-17 23:55:08 +02:00
anchors.margins: 40
2016-12-28 23:20:05 +02:00
anchors.left: parent . left
anchors.top: parent . top
anchors.right: parent . right
anchors.bottom: parent . bottom
spacing: 20
// solo
ColumnLayout {
id: soloBox
anchors.left: parent . left
anchors.right: parent . right
anchors.top: parent . top
2017-03-02 16:44:37 +02:00
spacing: 20
2016-12-28 23:20:05 +02:00
Label {
id: soloTitleLabel
fontSize: 24
2017-03-11 07:09:09 +02:00
text: qsTr ( "Solo mining" ) + translationManager . emptyString
2016-12-28 23:20:05 +02:00
}
Label {
id: soloLocalDaemonsLabel
fontSize: 18
color: "#D02020"
text: qsTr ( "(only available for local daemons)" )
visible: ! isDaemonLocal ( )
}
Text {
id: soloMainLabel
2017-03-19 18:13:00 +02:00
text: qsTr ( "Mining with your computer helps strengthen the Monero network. The more that people mine, the harder it is for the network to be attacked, and every little bit helps.<br> <br>Mining also gives you a small chance to earn some Monero. Your computer will create hashes looking for block solutions. If you find a block, you will get the associated reward. Good luck!" ) + translationManager . emptyString
2016-12-28 23:20:05 +02:00
wrapMode: Text . Wrap
2017-03-17 23:55:08 +02:00
Layout.fillWidth: true
2016-12-28 23:20:05 +02:00
}
RowLayout {
id: soloMinerThreadsRow
Label {
id: soloMinerThreadsLabel
color: "#4A4949"
2017-01-14 20:04:00 +02:00
text: qsTr ( "CPU threads" ) + translationManager . emptyString
2016-12-28 23:20:05 +02:00
fontSize: 16
2017-03-02 16:44:37 +02:00
Layout.preferredWidth: 120
2016-12-28 23:20:05 +02:00
}
LineEdit {
id: soloMinerThreadsLine
Layout.preferredWidth: 200
text: "1"
placeholderText: qsTr ( "(optional)" ) + translationManager . emptyString
validator: IntValidator { bottom: 1 }
}
}
RowLayout {
2017-03-02 16:44:37 +02:00
Layout.leftMargin: 125
CheckBox {
id: backgroundMining
enabled: startSoloMinerButton . enabled
checked: persistentSettings . allow_background_mining
onClicked: { persistentSettings . allow_background_mining = checked }
text: qsTr ( "Background mining (experimental)" ) + translationManager . emptyString
checkedIcon: "../images/checkedVioletIcon.png"
uncheckedIcon: "../images/uncheckedIcon.png"
}
}
RowLayout {
// Disable this option until stable
visible: false
Layout.leftMargin: 125
CheckBox {
id: ignoreBattery
enabled: startSoloMinerButton . enabled
checked: ! persistentSettings . miningIgnoreBattery
onClicked: { persistentSettings . miningIgnoreBattery = ! checked }
text: qsTr ( "Enable mining when running on battery" ) + translationManager . emptyString
checkedIcon: "../images/checkedVioletIcon.png"
uncheckedIcon: "../images/uncheckedIcon.png"
}
}
RowLayout {
Label {
id: manageSoloMinerLabel
color: "#4A4949"
text: qsTr ( "Manage miner" ) + translationManager . emptyString
fontSize: 16
}
2016-12-28 23:20:05 +02:00
StandardButton {
visible: true
//enabled: !walletManager.isMining()
id: startSoloMinerButton
width: 110
text: qsTr ( "Start mining" ) + translationManager . emptyString
shadowReleasedColor: "#FF4304"
shadowPressedColor: "#B32D00"
releasedColor: "#FF6C3C"
pressedColor: "#FF4304"
onClicked: {
2017-07-04 06:34:09 +03:00
var success = walletManager . startMining ( appWindow . currentWallet . address ( 0 , 0 ) , soloMinerThreadsLine . text , persistentSettings . allow_background_mining , persistentSettings . miningIgnoreBattery )
2016-12-28 23:20:05 +02:00
if ( success ) {
update ( )
} else {
errorPopup . title = qsTr ( "Error starting mining" ) + translationManager . emptyString ;
errorPopup . text = qsTr ( "Couldn't start mining.<br>" )
if ( ! isDaemonLocal ( ) )
errorPopup . text += qsTr ( "Mining is only available on local daemons. Run a local daemon to be able to mine.<br>" )
errorPopup . icon = StandardIcon . Critical
errorPopup . open ( )
}
}
}
StandardButton {
visible: true
//enabled: walletManager.isMining()
id: stopSoloMinerButton
width: 110
text: qsTr ( "Stop mining" ) + translationManager . emptyString
shadowReleasedColor: "#FF4304"
shadowPressedColor: "#B32D00"
releasedColor: "#FF6C3C"
pressedColor: "#FF4304"
onClicked: {
walletManager . stopMining ( )
update ( )
}
}
}
}
Text {
id: statusText
text: qsTr ( "Status: not mining" )
textFormat: Text . RichText
wrapMode: Text . Wrap
}
}
function updateStatusText ( ) {
var text = ""
if ( walletManager . isMining ( ) ) {
if ( text !== "" )
text += "<br>" ;
text += qsTr ( "Mining at %1 H/s" ) . arg ( walletManager . miningHashRate ( ) )
}
if ( text === "" ) {
text += qsTr ( "Not mining" ) + translationManager . emptyString ;
}
statusText . text = qsTr ( "Status: " ) + text
}
function update ( ) {
updateStatusText ( )
startSoloMinerButton . enabled = ! walletManager . isMining ( )
stopSoloMinerButton . enabled = ! startSoloMinerButton . enabled
}
StandardDialog {
id: errorPopup
cancelVisible: false
}
Timer {
id: timer
interval: 2000 ; running: false ; repeat: true
onTriggered: update ( )
}
function onPageCompleted ( ) {
console . log ( "Mining page loaded" ) ;
update ( )
2017-01-28 19:32:38 +02:00
timer . running = isDaemonLocal ( )
2016-12-28 23:20:05 +02:00
}
function onPageClosed ( ) {
timer . running = false
}
2014-07-07 20:08:30 +03:00
}