aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--qt-ui/mainwindow.cpp8
-rw-r--r--qt-ui/mainwindow.h3
-rw-r--r--qt-ui/mainwindow.ui6
-rw-r--r--qt-ui/updatemanager.cpp67
-rw-r--r--qt-ui/updatemanager.h21
-rw-r--r--subsurface.pro6
6 files changed, 109 insertions, 2 deletions
diff --git a/qt-ui/mainwindow.cpp b/qt-ui/mainwindow.cpp
index b63225295..ead32835c 100644
--- a/qt-ui/mainwindow.cpp
+++ b/qt-ui/mainwindow.cpp
@@ -37,6 +37,7 @@
#include "diveplanner.h"
#include "about.h"
#include "worldmap-save.h"
+#include "updatemanager.h"
#ifndef NO_PRINTING
#include "printdialog.h"
#endif
@@ -84,6 +85,8 @@ MainWindow::MainWindow() : QMainWindow(),
ui.divePlanner->settingsChanged();
ui.divePlannerWidget->settingsChanged();
+ updateManager = new UpdateManager(this);
+
#ifndef ENABLE_PLANNER
// ui.menuLog->removeAction(ui.actionDivePlanner);
#endif
@@ -575,6 +578,11 @@ void MainWindow::on_actionAboutSubsurface_triggered()
dlg.exec();
}
+void MainWindow::on_action_Check_for_Updates_triggered()
+{
+ updateManager->checkForUpdates();
+}
+
void MainWindow::on_actionUserManual_triggered()
{
#ifndef NO_USERMANUAL
diff --git a/qt-ui/mainwindow.h b/qt-ui/mainwindow.h
index a0c5be333..f47ade861 100644
--- a/qt-ui/mainwindow.h
+++ b/qt-ui/mainwindow.h
@@ -28,6 +28,7 @@ class MainTab;
class ProfileGraphicsView;
class QWebView;
class QSettings;
+class UpdateManager;
enum MainWindowTitleFormat {
MWTF_DEFAULT,
@@ -121,6 +122,7 @@ slots:
void on_actionAboutSubsurface_triggered();
void on_actionUserManual_triggered();
void on_actionDivePlanner_triggered();
+ void on_action_Check_for_Updates_triggered();
void current_dive_changed(int divenr);
void initialUiSetup();
@@ -171,6 +173,7 @@ private:
QString lastUsedDir();
void updateLastUsedDir(const QString &s);
bool filesAsArguments;
+ UpdateManager *updateManager;
};
MainWindow *mainWindow();
diff --git a/qt-ui/mainwindow.ui b/qt-ui/mainwindow.ui
index 2bf249683..1eadec7d3 100644
--- a/qt-ui/mainwindow.ui
+++ b/qt-ui/mainwindow.ui
@@ -601,6 +601,7 @@
<string>&amp;Help</string>
</property>
<addaction name="actionAboutSubsurface"/>
+ <addaction name="action_Check_for_Updates"/>
<addaction name="actionUserManual"/>
</widget>
<widget class="QMenu" name="menuImport">
@@ -910,6 +911,11 @@
<bool>false</bool>
</property>
</action>
+ <action name="action_Check_for_Updates">
+ <property name="text">
+ <string>&amp;Check for Updates</string>
+ </property>
+ </action>
</widget>
<customwidgets>
<customwidget>
diff --git a/qt-ui/updatemanager.cpp b/qt-ui/updatemanager.cpp
new file mode 100644
index 000000000..e721f914c
--- /dev/null
+++ b/qt-ui/updatemanager.cpp
@@ -0,0 +1,67 @@
+#include "updatemanager.h"
+#include <QtNetwork>
+#include <QMessageBox>
+#include "subsurfacewebservices.h"
+#include "ssrf-version.h"
+
+UpdateManager::UpdateManager(QObject *parent) :
+ QObject(parent)
+{
+ manager = SubsurfaceWebServices::manager();
+ connect (manager, SIGNAL(finished(QNetworkReply*)), SLOT(requestReceived(QNetworkReply*)));
+}
+
+void UpdateManager::checkForUpdates()
+{
+ QString os;
+
+#if defined(Q_OS_WIN)
+ os = "win";
+#elif defined(Q_OS_MAC)
+ os = "osx";
+#else
+ os = "unknown";
+#endif
+
+ QString version = VERSION_STRING;
+ QString url = QString("http://subsurface.hohndel.org/updatecheck.html?os=%1&ver=%2").arg(os, version);
+ manager->get(QNetworkRequest(QUrl(url)));
+}
+
+void UpdateManager::requestReceived(QNetworkReply *reply)
+{
+ QMessageBox msgbox;
+ QString msgTitle = tr("Check for updates.");
+ QString msgText = tr("<h3>Subsurface was unable to check for updates.</h3>");
+
+
+ if (reply->error() != QNetworkReply::NoError) {
+ //Network Error
+ msgText = msgText + tr("<br/><b>The following error occurred:</b><br/>") + reply->errorString()
+ + tr("<br/><br/><b>Please check your internet connection.</b>");
+ } else {
+ //No network error
+ QString response(reply->readAll());
+ QString responseBody = response.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")) {
+ msgText = tr("A new version of subsurface is available.<br/>Click on:<br/><a href=\"%1\">%1</a><br/> to download it.")
+ .arg(responseBody);
+ } else if (responseBody.startsWith("Latest version")) {
+ msgText = tr("<b>A new version of subsurface is available.</b><br/><br/>%1")
+ .arg(responseBody);
+ } else {
+ msgText = tr("There was an error while trying to check for updates.<br/><br/>%1").arg(responseBody);
+ msgbox.setIcon(QMessageBox::Warning);
+ }
+ }
+
+ msgbox.setWindowTitle(msgTitle);
+ msgbox.setText(msgText);
+ msgbox.setTextFormat(Qt::RichText);
+ msgbox.exec();
+}
diff --git a/qt-ui/updatemanager.h b/qt-ui/updatemanager.h
new file mode 100644
index 000000000..18b47cfde
--- /dev/null
+++ b/qt-ui/updatemanager.h
@@ -0,0 +1,21 @@
+#ifndef UPDATEMANAGER_H
+#define UPDATEMANAGER_H
+
+#include <QObject>
+
+class QNetworkAccessManager;
+class QNetworkReply;
+
+class UpdateManager : public QObject
+{
+ Q_OBJECT
+public:
+ explicit UpdateManager(QObject *parent = 0);
+ void checkForUpdates();
+private:
+ QNetworkAccessManager *manager;
+public slots:
+ void requestReceived(QNetworkReply* reply);
+};
+
+#endif // UPDATEMANAGER_H
diff --git a/subsurface.pro b/subsurface.pro
index 3944da095..6d13c1de8 100644
--- a/subsurface.pro
+++ b/subsurface.pro
@@ -76,7 +76,8 @@ HEADERS = \
qt-ui/profile/diveprofileitem.h \
qt-ui/profile/diveeventitem.h \
qt-ui/profile/divetooltipitem.h \
- qt-ui/profile/ruleritem.h
+ qt-ui/profile/ruleritem.h \
+ qt-ui/updatemanager.h
android: HEADERS -= \
qt-ui/usermanual.h \
@@ -148,7 +149,8 @@ SOURCES = \
qt-ui/profile/diveprofileitem.cpp \
qt-ui/profile/diveeventitem.cpp \
qt-ui/profile/divetooltipitem.cpp \
- qt-ui/profile/ruleritem.cpp
+ qt-ui/profile/ruleritem.cpp \
+ qt-ui/updatemanager.cpp
android: SOURCES += android.cpp
else: linux*: SOURCES += linux.c