Add updates notifier

pull/2/head
moneromooo.monero 7 years ago
parent c6688dc876
commit 97362504e8

@ -0,0 +1,84 @@
// Copyright (c) 2017, 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
import QtQuick.Controls 1.4
import moneroComponents.Wallet 1.0
Item {
id: item
property string message: ""
property bool active: false
height: 120
width: 240
x: parent.width - width
y: parent.height - height * scale.yScale
anchors.margins:15
anchors.bottom: parent.bottom
anchors.right: parent.right
Rectangle {
color: "#FF6C3C"
border.color: "black"
anchors.fill: parent
TextArea {
id:versionText
readOnly: true
backgroundVisible: false
textFormat: TextEdit.AutoText
anchors.fill: parent
font.family: "Arial"
font.pixelSize: 12
textMargin: 20
textColor: "white"
text: item.message
}
}
transform: Scale {
id: scale
yScale: item.active ? 1 : 0
Behavior on yScale {
NumberAnimation { duration: 500; easing.type: Easing.InOutCubic }
}
}
Timer {
id: hider
interval: 12000; running: false; repeat: false
onTriggered: { item.active = false }
}
function show(message) {
item.message = message
item.active = true
hider.running = true
}
}

@ -765,6 +765,7 @@ ApplicationWindow {
initialize(persistentSettings);
}
checkUpdates();
}
onRightPanelExpandedChanged: {
@ -1216,6 +1217,9 @@ ApplicationWindow {
}
}
Notifier {
id: notifier
}
}
onClosing: {
// Close wallet non async on exit
@ -1223,4 +1227,30 @@ ApplicationWindow {
// Stop daemon and pool miner
daemonManager.stop();
}
function checkUpdates() {
var update = walletManager.checkUpdates("monero-gui", "gui")
if (update === "")
return
print("Update found: " + update)
var parts = update.split("|")
if (parts.length == 4) {
var version = parts[0]
var hash = parts[1]
var user_url = parts[2]
var auto_url = parts[3]
var msg = qsTr("New version of monero-wallet-gui is available: %1<br>%2").arg(version).arg(user_url) + translationManager.emptyString
notifier.show(msg)
}
else {
print("Failed to parse update spec")
}
}
Timer {
id: updatesTimer
interval: 3600*1000; running: true; repeat: true
onTriggered: checkUpdates()
}
}

@ -126,5 +126,6 @@
<file>wizard/WizardCreateViewOnlyWallet.qml</file>
<file>components/DaemonConsole.qml</file>
<file>components/QRCodeScanner.qml</file>
<file>components/Notifier.qml</file>
</qresource>
</RCC>

@ -40,9 +40,10 @@ bool DaemonManager::start(const QString &flags)
arguments << str;
}
arguments << "--updates" << "disabled";
qDebug() << "starting monerod " + m_monerod;
qDebug() << "With command line arguments " << m_monerod;
qDebug() << "With command line arguments " << arguments;
m_daemon = new QProcess();
initialized = true;

@ -328,6 +328,14 @@ bool WalletManager::saveQrCode(const QString &code, const QString &path) const
return QRCodeImageProvider::genQrImage(code, &size).scaled(size.expandedTo(QSize(240, 240)), Qt::KeepAspectRatio).save(path, "PNG", 100);
}
QString WalletManager::checkUpdates(const QString &software, const QString &subdir) const
{
const std::tuple<bool, std::string, std::string, std::string, std::string> result = Monero::WalletManager::checkUpdates(software.toStdString(), subdir.toStdString());
if (!std::get<0>(result))
return QString("");
return QString::fromStdString(std::get<1>(result) + "|" + std::get<2>(result) + "|" + std::get<3>(result) + "|" + std::get<4>(result));
}
WalletManager::WalletManager(QObject *parent) : QObject(parent)
{
m_pimpl = Monero::WalletManagerFactory::getWalletManager();

@ -134,6 +134,7 @@ public:
Q_INVOKABLE QString resolveOpenAlias(const QString &address) const;
Q_INVOKABLE bool parse_uri(const QString &uri, QString &address, QString &payment_id, uint64_t &amount, QString &tx_description, QString &recipient_name, QVector<QString> &unknown_parameters, QString &error);
Q_INVOKABLE bool saveQrCode(const QString &, const QString &) const;
Q_INVOKABLE QString checkUpdates(const QString &software, const QString &subdir) const;
signals: