From af70c81082bad6fc83fdf3b591fd19a1fc8bdc26 Mon Sep 17 00:00:00 2001 From: Jacob Brydolf Date: Mon, 3 Oct 2016 23:29:30 +0200 Subject: [PATCH] Added daemon BC sync progress bar depends on https://github.com/monero-project/monero/pull/1173 Signed-off-by: Jacob Brydolf --- LeftPanel.qml | 10 +++- components/DaemonProgress.qml | 90 +++++++++++++++++++++++++++++++++++ main.qml | 5 ++ qml.qrc | 1 + src/libwalletqt/Wallet.cpp | 6 +++ src/libwalletqt/Wallet.h | 5 +- 6 files changed, 115 insertions(+), 2 deletions(-) create mode 100644 components/DaemonProgress.qml diff --git a/LeftPanel.qml b/LeftPanel.qml index 59793659..93290bc6 100644 --- a/LeftPanel.qml +++ b/LeftPanel.qml @@ -36,6 +36,7 @@ Rectangle { property alias unlockedBalanceText: unlockedBalanceText.text property alias balanceText: balanceText.text property alias networkStatus : networkStatus + property alias daemonProgress : daemonProgress signal dashboardClicked() signal historyClicked() @@ -352,9 +353,16 @@ Rectangle { id: networkStatus anchors.left: parent.left anchors.right: parent.right - anchors.bottom: parent.bottom + anchors.bottom: (daemonProgress.visible)? daemonProgress.top : parent.bottom; connected: false } + + DaemonProgress { + id: daemonProgress + anchors.left: parent.left + anchors.right: parent.right + anchors.bottom: parent.bottom + } } // indicate disabled state Desaturate { diff --git a/components/DaemonProgress.qml b/components/DaemonProgress.qml new file mode 100644 index 00000000..1ed533e3 --- /dev/null +++ b/components/DaemonProgress.qml @@ -0,0 +1,90 @@ +// Copyright (c) 2014-2015, The Monero Project +// +// 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. + +import QtQuick 2.0 + +Item { + id: item + property int fillLevel: 0 + height: 44 + anchors.margins: 10 + visible: false + //clip: true + + function updateProgress(currentBlock,targetBlock){ + if(targetBlock > 0) { + var progressLevel = ((currentBlock/targetBlock) * 100).toFixed(0); + fillLevel = progressLevel + console.log("target block: ",progressLevel) + progressText.text = qsTr("Synchronizing blocks %1/%2").arg(currentBlock.toFixed(0)).arg(targetBlock.toFixed(0)); + console.log("Progress text: " + progressText.text); + + // TODO: lower daemon block height cache, ttl and refresh interval? + + item.visible = (currentBlock < targetBlock) + + } + } + + Rectangle { + id: bar + anchors.left: parent.left + anchors.right: parent.right + anchors.top: parent.top + height: 18 + //radius: 4 + color: "#FFFFFF" + + Rectangle { + id: fillRect + anchors.top: parent.top + anchors.bottom: parent.bottom + anchors.left: parent.left + anchors.margins: 2 + property int maxWidth: parent.width - 4 + width: (maxWidth * fillLevel) / 100 + + color: { + if(item.fillLevel < 99) return "#FF6C3C" + //if(item.fillLevel < 99) return "#FFE00A" + return "#36B25C" + } + + } + } + + Text { + id:progressText + anchors.bottom: parent.bottom + font.family: "Arial" + font.pixelSize: 12 + color: "#545454" + text: qsTr("Synchronizing blocks") + } + +} diff --git a/main.qml b/main.qml index 1a97a5d1..82f5c17f 100644 --- a/main.qml +++ b/main.qml @@ -221,6 +221,9 @@ ApplicationWindow { if (splash.visible) { hideProcessingSplash() } + var dCurrentBlock = currentWallet.daemonBlockChainHeight(); + var dTargetBlock = currentWallet.daemonBlockChainTargetHeight(); + leftPanel.daemonProgress.updateProgress(dCurrentBlock,dTargetBlock); // Store wallet after first refresh. To prevent broken wallet after a crash // TODO: Move this to libwallet? @@ -231,6 +234,7 @@ ApplicationWindow { } leftPanel.networkStatus.connected = currentWallet.connected + onWalletUpdate(); } @@ -247,6 +251,7 @@ ApplicationWindow { } + function walletsFound() { var wallets = walletManager.findWallets(moneroAccountsDir); if (wallets.length === 0) { diff --git a/qml.qrc b/qml.qrc index a44266b9..ad47ba44 100644 --- a/qml.qrc +++ b/qml.qrc @@ -116,5 +116,6 @@ lang/flags/italy.png components/PasswordDialog.qml components/ProcessingSplash.qml + components/DaemonProgress.qml diff --git a/src/libwalletqt/Wallet.cpp b/src/libwalletqt/Wallet.cpp index 4dcf9add..9f0908b9 100644 --- a/src/libwalletqt/Wallet.cpp +++ b/src/libwalletqt/Wallet.cpp @@ -157,6 +157,12 @@ quint64 Wallet::daemonBlockChainHeight() const return m_daemonBlockChainHeight; } +quint64 Wallet::daemonBlockChainTargetHeight() const +{ + m_daemonBlockChainTargetHeight = m_walletImpl->daemonBlockChainTargetHeight(); + return m_daemonBlockChainTargetHeight; +} + bool Wallet::refresh() { bool result = m_walletImpl->refresh(); diff --git a/src/libwalletqt/Wallet.h b/src/libwalletqt/Wallet.h index 1a6459d4..d3ca4085 100644 --- a/src/libwalletqt/Wallet.h +++ b/src/libwalletqt/Wallet.h @@ -92,6 +92,9 @@ public: //! returns daemon's blockchain height Q_INVOKABLE quint64 daemonBlockChainHeight() const; + //! returns daemon's blockchain target height + Q_INVOKABLE quint64 daemonBlockChainTargetHeight() const; + //! refreshes the wallet Q_INVOKABLE bool refresh(); @@ -162,7 +165,7 @@ private: mutable QTime m_daemonBlockChainHeightTime; mutable quint64 m_daemonBlockChainHeight; int m_daemonBlockChainHeightTtl; - + mutable quint64 m_daemonBlockChainTargetHeight; };