From eea8e291d327baae30adbeefc5f2bb12e38b8689 Mon Sep 17 00:00:00 2001
From: Ming Rui Zhang <mingrui.zhang@savoirfairelinux.com>
Date: Thu, 15 Oct 2020 13:17:08 -0400
Subject: [PATCH] update: improvement for update mechanism

1. Distinguish SSL error and network error
2. Cancel request when connectivity is changed
3. Cancel request when download box is closed

Change-Id: I155ef5d97017c61d164f64ade513cfe37d5dc8bc
---
 src/constant/JamiStrings.qml                   | 3 ++-
 src/networkmanager.cpp                         | 7 +++++++
 src/settingsview/components/UpdateSettings.qml | 7 ++++++-
 3 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/src/constant/JamiStrings.qml b/src/constant/JamiStrings.qml
index 1278f35c3..c21518ca4 100644
--- a/src/constant/JamiStrings.qml
+++ b/src/constant/JamiStrings.qml
@@ -282,7 +282,8 @@ Item {
     property string updateFound: qsTr("A new version of Jami was found\n Would you like to update now?")
     property string updateNotFound: qsTr("No new version of Jami was found")
     property string updateCheckError: qsTr("An error occured when checking for a new version")
-    property string updateDownloadNetworkError: qsTr("Installer download failed due to a network error")
+    property string updateNetworkError: qsTr("Network error")
+    property string updateSSLError: qsTr("SSL error")
     property string updateDownloadCanceled: qsTr("Installer download canceled")
     property string updateDownloading: "Downloading"
     property string confirmBeta: qsTr("This will uninstall your current Release version and you can always download the latest Release version on our website")
diff --git a/src/networkmanager.cpp b/src/networkmanager.cpp
index 9f4a3f733..7239d326e 100644
--- a/src/networkmanager.cpp
+++ b/src/networkmanager.cpp
@@ -30,9 +30,13 @@ NetWorkManager::NetWorkManager(ConnectivityMonitor* cm, QObject* parent)
     , manager_(new QNetworkAccessManager(this))
     , reply_(nullptr)
     , connectivityMonitor_(cm)
+    , lastConnectionState_(cm->isOnline())
 {
     emit statusChanged(GetStatus::IDLE);
+
     connect(connectivityMonitor_, &ConnectivityMonitor::connectivityChanged, [this] {
+        cancelRequest();
+
         auto connected = connectivityMonitor_->isOnline();
         if (connected && !lastConnectionState_) {
             manager_->deleteLater();
@@ -129,6 +133,9 @@ void
 NetWorkManager::onSslErrors(const QList<QSslError>& sslErrors)
 {
 #if QT_CONFIG(ssl)
+    reply_->disconnect();
+    reset(true);
+
     QString errorsString;
     for (const QSslError& error : sslErrors) {
         if (errorsString.length() > 0) {
diff --git a/src/settingsview/components/UpdateSettings.qml b/src/settingsview/components/UpdateSettings.qml
index 69f4282ce..b3d9c4a3c 100644
--- a/src/settingsview/components/UpdateSettings.qml
+++ b/src/settingsview/components/UpdateSettings.qml
@@ -121,8 +121,9 @@ ColumnLayout {
             case NetWorkManager.DISCONNECTED:
                 return JamiStrings.networkDisconnected
             case NetWorkManager.NETWORK_ERROR:
+                return JamiStrings.updateNetworkError
             case NetWorkManager.SSL_ERROR:
-                return JamiStrings.updateDownloadNetworkError
+                return JamiStrings.updateSSLError
             case NetWorkManager.CANCELED:
                 return JamiStrings.updateDownloadCanceled
             default: return {}
@@ -248,5 +249,9 @@ ColumnLayout {
         buttonTitles: [JamiStrings.optionCancel]
         buttonStyles: [SimpleMessageDialog.ButtonStyle.TintedBlue]
         buttonCallBacks: [function() {UpdateManager.cancelUpdate()}]
+        onVisibilityChanged: {
+            if (!visible)
+                UpdateManager.cancelUpdate()
+        }
     }
 }
-- 
GitLab