2018-01-07 06:20:45 +01:00
// Copyright (c) 2014-2018, The Monero Project
2015-04-01 10:56:05 +02: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 19:08:30 +02:00
import QtQuick 2.0
2016-12-28 22:20:05 +01:00
import QtQuick . Layouts 1.1
import QtQuick . Dialogs 1.2
import "../components"
import moneroComponents . Wallet 1.0
2014-07-07 19:08:30 +02:00
Rectangle {
2016-12-28 22:20:05 +01:00
id: root
2018-01-28 00:14:42 +01:00
color: "transparent"
2016-12-28 22:20:05 +01:00
property var currentHashRate: 0
/* main layout */
ColumnLayout {
id: mainLayout
2017-03-17 22:55:08 +01:00
anchors.margins: 40
2016-12-28 22:20:05 +01: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 15:44:37 +01:00
spacing: 20
2016-12-28 22:20:05 +01:00
Label {
id: soloTitleLabel
fontSize: 24
2017-03-11 06:09:09 +01:00
text: qsTr ( "Solo mining" ) + translationManager . emptyString
2016-12-28 22:20:05 +01:00
}
Label {
id: soloLocalDaemonsLabel
fontSize: 18
color: "#D02020"
2018-06-26 12:28:31 +02:00
text: qsTr ( "(only available for local daemons)" ) + translationManager . emptyString
2017-12-11 22:44:01 +01:00
visible: ! walletManager . isDaemonLocal ( appWindow . currentDaemonAddress )
2016-12-28 22:20:05 +01:00
}
2018-05-08 03:27:22 +02:00
Label {
id: soloSyncedLabel
fontSize: 18
color: "#D02020"
2018-06-26 12:28:31 +02:00
text: qsTr ( "Your daemon must be synchronized before you can start mining" ) + translationManager . emptyString
2018-05-08 03:27:22 +02:00
visible: walletManager . isDaemonLocal ( appWindow . currentDaemonAddress ) && ! appWindow . daemonSynced
}
2016-12-28 22:20:05 +01:00
Text {
id: soloMainLabel
2017-03-19 17:13:00 +01: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 22:20:05 +01:00
wrapMode: Text . Wrap
2017-03-17 22:55:08 +01:00
Layout.fillWidth: true
2018-03-24 20:48:19 +01:00
font.family: Style . fontRegular . name
2018-01-28 00:14:42 +01:00
font.pixelSize: 14 * scaleRatio
color: Style . defaultFontColor
2016-12-28 22:20:05 +01:00
}
RowLayout {
id: soloMinerThreadsRow
Label {
id: soloMinerThreadsLabel
2018-01-28 00:14:42 +01:00
color: Style . defaultFontColor
2017-01-14 19:04:00 +01:00
text: qsTr ( "CPU threads" ) + translationManager . emptyString
2016-12-28 22:20:05 +01:00
fontSize: 16
2017-03-02 15:44:37 +01:00
Layout.preferredWidth: 120
2016-12-28 22:20:05 +01:00
}
LineEdit {
id: soloMinerThreadsLine
Layout.preferredWidth: 200
text: "1"
placeholderText: qsTr ( "(optional)" ) + translationManager . emptyString
validator: IntValidator { bottom: 1 }
}
}
RowLayout {
2017-03-02 15:44:37 +01: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
}
}
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
}
}
RowLayout {
Label {
id: manageSoloMinerLabel
2018-01-28 00:14:42 +01:00
color: Style . defaultFontColor
2017-03-02 15:44:37 +01:00
text: qsTr ( "Manage miner" ) + translationManager . emptyString
fontSize: 16
}
2016-12-28 22:20:05 +01:00
StandardButton {
visible: true
//enabled: !walletManager.isMining()
id: startSoloMinerButton
width: 110
2018-03-19 23:30:34 +01:00
small: true
2016-12-28 22:20:05 +01:00
text: qsTr ( "Start mining" ) + translationManager . emptyString
onClicked: {
2017-07-04 05:34:09 +02:00
var success = walletManager . startMining ( appWindow . currentWallet . address ( 0 , 0 ) , soloMinerThreadsLine . text , persistentSettings . allow_background_mining , persistentSettings . miningIgnoreBattery )
2016-12-28 22:20:05 +01:00
if ( success ) {
update ( )
} else {
errorPopup . title = qsTr ( "Error starting mining" ) + translationManager . emptyString ;
errorPopup . text = qsTr ( "Couldn't start mining.<br>" )
2017-12-11 22:44:01 +01:00
if ( ! walletManager . isDaemonLocal ( appWindow . currentDaemonAddress ) )
2016-12-28 22:20:05 +01:00
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
2018-03-19 23:30:34 +01:00
small: true
2016-12-28 22:20:05 +01:00
text: qsTr ( "Stop mining" ) + translationManager . emptyString
onClicked: {
walletManager . stopMining ( )
update ( )
}
}
}
}
Text {
id: statusText
text: qsTr ( "Status: not mining" )
2018-01-28 00:14:42 +01:00
color: Style . defaultFontColor
2016-12-28 22:20:05 +01:00
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-12-11 22:44:01 +01:00
timer . running = walletManager . isDaemonLocal ( appWindow . currentDaemonAddress )
2016-12-28 22:20:05 +01:00
}
function onPageClosed ( ) {
timer . running = false
}
2014-07-07 19:08:30 +02:00
}