summaryrefslogtreecommitdiffstats
path: root/qt-ui/updatemanager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'qt-ui/updatemanager.cpp')
-rw-r--r--qt-ui/updatemanager.cpp154
1 files changed, 0 insertions, 154 deletions
diff --git a/qt-ui/updatemanager.cpp b/qt-ui/updatemanager.cpp
deleted file mode 100644
index 0760d6407..000000000
--- a/qt-ui/updatemanager.cpp
+++ /dev/null
@@ -1,154 +0,0 @@
-#include "updatemanager.h"
-#include "helpers.h"
-#include <QtNetwork>
-#include <QMessageBox>
-#include <QUuid>
-#include "subsurfacewebservices.h"
-#include "version.h"
-#include "mainwindow.h"
-
-UpdateManager::UpdateManager(QObject *parent) :
- QObject(parent),
- isAutomaticCheck(false)
-{
- // is this the first time this version was run?
- QSettings settings;
- settings.beginGroup("UpdateManager");
- if (settings.contains("DontCheckForUpdates") && settings.value("DontCheckForUpdates") == "TRUE")
- return;
- if (settings.contains("LastVersionUsed")) {
- // we have checked at least once before
- if (settings.value("LastVersionUsed").toString() != subsurface_git_version()) {
- // we have just updated - wait two weeks before you check again
- settings.setValue("LastVersionUsed", QString(subsurface_git_version()));
- settings.setValue("NextCheck", QDateTime::currentDateTime().addDays(14).toString(Qt::ISODate));
- } else {
- // is it time to check again?
- QString nextCheckString = settings.value("NextCheck").toString();
- QDateTime nextCheck = QDateTime::fromString(nextCheckString, Qt::ISODate);
- if (nextCheck > QDateTime::currentDateTime())
- return;
- }
- }
- settings.setValue("LastVersionUsed", QString(subsurface_git_version()));
- settings.setValue("NextCheck", QDateTime::currentDateTime().addDays(14).toString(Qt::ISODate));
- checkForUpdates(true);
-}
-
-void UpdateManager::checkForUpdates(bool automatic)
-{
- QString os;
-
-#if defined(Q_OS_WIN)
- os = "win";
-#elif defined(Q_OS_MAC)
- os = "osx";
-#elif defined(Q_OS_LINUX)
- os = "linux";
-#else
- os = "unknown";
-#endif
- isAutomaticCheck = automatic;
- QString version = subsurface_canonical_version();
- QString uuidString = getUUID();
- QString url = QString("http://subsurface-divelog.org/updatecheck.html?os=%1&version=%2&uuid=%3").arg(os, version, uuidString);
- QNetworkRequest request;
- request.setUrl(url);
- request.setRawHeader("Accept", "text/xml");
- QString userAgent = getUserAgent();
- request.setRawHeader("User-Agent", userAgent.toUtf8());
- connect(SubsurfaceWebServices::manager()->get(request), SIGNAL(finished()), this, SLOT(requestReceived()), Qt::UniqueConnection);
-}
-
-QString UpdateManager::getUUID()
-{
- QString uuidString;
- QSettings settings;
- settings.beginGroup("UpdateManager");
- if (settings.contains("UUID")) {
- uuidString = settings.value("UUID").toString();
- } else {
- QUuid uuid = QUuid::createUuid();
- uuidString = uuid.toString();
- settings.setValue("UUID", uuidString);
- }
- uuidString.replace("{", "").replace("}", "");
- return uuidString;
-}
-
-void UpdateManager::requestReceived()
-{
- bool haveNewVersion = false;
- QMessageBox msgbox;
- QString msgTitle = tr("Check for updates.");
- QString msgText = "<h3>" + tr("Subsurface was unable to check for updates.") + "</h3>";
-
- QNetworkReply *reply = qobject_cast<QNetworkReply*>(sender());
- if (reply->error() != QNetworkReply::NoError) {
- //Network Error
- msgText = msgText + "<br/><b>" + tr("The following error occurred:") + "</b><br/>" + reply->errorString()
- + "<br/><br/><b>" + tr("Please check your internet connection.") + "</b>";
- } else {
- //No network error
- QString responseBody(reply->readAll());
- QString responseLink;
- if (responseBody.contains('"'))
- responseLink = responseBody.split("\"").at(1);
-
- msgbox.setIcon(QMessageBox::Information);
- if (responseBody == "OK") {
- msgText = tr("You are using the latest version of Subsurface.");
- } else if (responseBody.startsWith("[\"http")) {
- haveNewVersion = true;
- msgText = tr("A new version of Subsurface is available.<br/>Click on:<br/><a href=\"%1\">%1</a><br/> to download it.")
- .arg(responseLink);
- } else if (responseBody.startsWith("Latest version")) {
- // the webservice backend doesn't localize - but it's easy enough to just replace the
- // strings that it is likely to send back
- haveNewVersion = true;
- msgText = QString("<b>") + tr("A new version of Subsurface is available.") + QString("</b><br/><br/>") +
- tr("Latest version is %1, please check %2 our download page %3 for information in how to update.")
- .arg(responseLink).arg("<a href=\"http://subsurface-divelog.org/download\">").arg("</a>");
- } else {
- // the webservice backend doesn't localize - but it's easy enough to just replace the
- // strings that it is likely to send back
- if (!responseBody.contains("latest development") &&
- !responseBody.contains("newer") &&
- !responseBody.contains("beta", Qt::CaseInsensitive))
- haveNewVersion = true;
- if (responseBody.contains("Newest release version is "))
- responseBody.replace("Newest release version is ", tr("Newest release version is "));
- msgText = tr("The server returned the following information:").append("<br/><br/>").append(responseBody);
- msgbox.setIcon(QMessageBox::Warning);
- }
- }
-#ifndef SUBSURFACE_MOBILE
- if (haveNewVersion || !isAutomaticCheck) {
- msgbox.setWindowTitle(msgTitle);
- msgbox.setWindowIcon(QIcon(":/subsurface-icon"));
- msgbox.setText(msgText);
- msgbox.setTextFormat(Qt::RichText);
- msgbox.exec();
- }
- if (isAutomaticCheck) {
- QSettings settings;
- settings.beginGroup("UpdateManager");
- if (!settings.contains("DontCheckForUpdates")) {
- // we allow an opt out of future checks
- QMessageBox response(MainWindow::instance());
- QString message = tr("Subsurface is checking every two weeks if a new version is available. If you don't want Subsurface to continue checking, please click Decline.");
- response.addButton(tr("Decline"), QMessageBox::RejectRole);
- response.addButton(tr("Accept"), QMessageBox::AcceptRole);
- response.setText(message);
- response.setWindowTitle(tr("Automatic check for updates"));
- response.setIcon(QMessageBox::Question);
- response.setWindowModality(Qt::WindowModal);
- int ret = response.exec();
- if (ret == QMessageBox::Accepted)
- settings.setValue("DontCheckForUpdates", "FALSE");
- else
- settings.setValue("DontCheckForUpdates", "TRUE");
- }
- }
-#endif
-}