From 79f0fb39d1b66a37ec66110e9e9b657b5be2d3ec Mon Sep 17 00:00:00 2001 From: Aditya Kulkarni Date: Mon, 14 Jan 2019 15:03:35 -0800 Subject: [PATCH] Add null checks --- src/mainwindow.cpp | 29 +++++++++++++++-------------- src/mainwindow.h | 1 - src/mainwindow.ui | 2 +- src/rpc.cpp | 19 +++++++++++++++---- src/rpc.h | 2 +- 5 files changed, 32 insertions(+), 21 deletions(-) diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 6f0d8cb..4de5965 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -39,7 +39,8 @@ MainWindow::MainWindow(QWidget *parent) : // Set up check for updates action QObject::connect(ui->actionCheck_for_Updates, &QAction::triggered, [=] () { - QDesktopServices::openUrl(QUrl("https://github.com/ZcashFoundation/zec-qt-wallet/releases")); + // Silent is false, so show notification even if no update was found + rpc->checkForUpdate(false); }); // Pay zcash URI @@ -659,21 +660,16 @@ void MainWindow::doImport(QList* keys) { } } -void MainWindow::payZcashURIError(QString errorDetail) { - QMessageBox::critical(this, tr("Error paying zcash URI"), - tr("URI should be of the form 'zcash:?amt=x&memo=y") + "\n" + errorDetail); -} - void MainWindow::payZcashURI() { + // Error to display if something goes wrong. + auto payZcashURIError = [=] (QString errorDetail = "") { + QMessageBox::critical(this, tr("Error paying zcash URI"), + tr("URI should be of the form 'zcash:?amt=x&memo=y") + "\n" + errorDetail); + }; + // Read a zcash URI and pay it - QInputDialog uriDialog(this); - uriDialog.setInputMode(QInputDialog::TextInput); - uriDialog.setWindowTitle(tr("Paste zcash URI")); - uriDialog.setLabelText("zcash://" + QString(" ").repeated(180)); // Hack to adjust the width of the dialog - if (uriDialog.exec() != QDialog::Accepted) { - return; - } - QString uri = uriDialog.textValue(); + QString uri = QInputDialog::getText(this, tr("Paste zcash URI"), + "zcash://" + QString(" ").repeated(180)); // URI should be of the form zcash://address?amt=x&memo=y if (!uri.startsWith("zcash:")) { @@ -707,6 +703,11 @@ void MainWindow::payZcashURI() { QStringList args = uri.split("&"); for (QString arg: args) { QStringList kv = arg.split("="); + if (kv.length() != 2) { + payZcashURIError(); + return; + } + if (kv[0].toLower() == "amt" || kv[0].toLower() == "amount") { amount = kv[1].toDouble(); } else if (kv[0].toLower() == "memo") { diff --git a/src/mainwindow.h b/src/mainwindow.h index f02adb4..5b5350e 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -89,7 +89,6 @@ private: void donate(); void addressBook(); - void payZcashURIError(QString errorDetail = ""); void payZcashURI(); void postToZBoard(); void importPrivKey(); diff --git a/src/mainwindow.ui b/src/mainwindow.ui index 86f1a90..7e758d1 100644 --- a/src/mainwindow.ui +++ b/src/mainwindow.ui @@ -1111,7 +1111,7 @@ - Pay zcash URI... + Pay zcash &URI... diff --git a/src/rpc.cpp b/src/rpc.cpp index 5b5cfef..7eab839 100644 --- a/src/rpc.cpp +++ b/src/rpc.cpp @@ -905,7 +905,7 @@ void RPC::watchTxStatus() { }); } -void RPC::checkForUpdate() { +void RPC::checkForUpdate(bool silent) { if (conn == nullptr) return noConnection(); @@ -926,13 +926,18 @@ void RPC::checkForUpdate() { QVersionNumber maxVersion(0, 0, 0); for (QJsonValue rel : releases) { + if (!rel.toObject().contains("tag_name")) + continue; + QString tag = rel.toObject()["tag_name"].toString(); if (tag.startsWith("v")) tag = tag.right(tag.length() - 1); - auto v = QVersionNumber::fromString(tag); - if (v > maxVersion) - maxVersion = v; + if (!tag.isEmpty()) { + auto v = QVersionNumber::fromString(tag); + if (v > maxVersion) + maxVersion = v; + } } auto currentVersion = QVersionNumber::fromString(APP_VERSION); @@ -946,6 +951,12 @@ void RPC::checkForUpdate() { if (ans == QMessageBox::Yes) { QDesktopServices::openUrl(QUrl("https://github.com/ZcashFoundation/zec-qt-wallet/releases")); } + } else { + if (!silent) { + QMessageBox::information(main, QObject::tr("No updates available"), + QObject::tr("You already have the latest release v%1") + .arg(currentVersion.toString())); + } } } } diff --git a/src/rpc.h b/src/rpc.h index 7f0c18d..3b53fb8 100644 --- a/src/rpc.h +++ b/src/rpc.h @@ -38,7 +38,7 @@ public: void refreshAddresses(); - void checkForUpdate(); + void checkForUpdate(bool silent = true); void refreshZECPrice(); void getZboardTopics(std::function)> cb);