From b0ca456410225b20254faca8a338ebf0efd49a71 Mon Sep 17 00:00:00 2001 From: Mark Watkins Date: Sat, 16 Apr 2016 23:15:42 +1000 Subject: [PATCH] Update notifier for Mac/Linux platforms --- sleepyhead/UpdaterWindow.cpp | 72 ++++++++++++++++++++++++++++++------ sleepyhead/UpdaterWindow.h | 1 + sleepyhead/main.cpp | 2 +- sleepyhead/mainwindow.cpp | 1 + sleepyhead/updateparser.h | 1 - 5 files changed, 64 insertions(+), 13 deletions(-) diff --git a/sleepyhead/UpdaterWindow.cpp b/sleepyhead/UpdaterWindow.cpp index 9195d889..106b7648 100644 --- a/sleepyhead/UpdaterWindow.cpp +++ b/sleepyhead/UpdaterWindow.cpp @@ -9,6 +9,7 @@ #include #include #include +#include #include #include #include @@ -71,21 +72,46 @@ UpdaterWindow::~UpdaterWindow() delete ui; } +QString platformStr() +{ + static QString platform; + +#if defined(Q_OS_WIN) + platform="win32"; +#elif defined(Q_OS_MAC) + platform="mac"; +#elif defined(Q_OS_LINUX) + platform="ubuntu"; +#else + platform="unknown"; +#endif + + return platform; +} void UpdaterWindow::checkForUpdates() { - QString filename = QApplication::applicationDirPath() + "/Updates.xml"; + QString platform=platformStr(); +#ifdef Q_OS_WINDOWS + QString filename = QApplication::applicationDirPath() + "/Updates.xml"; +#else + QString filename = QApplication::applicationDirPath() + QString("/LatestVersion-%1").arg(platform); +#endif // Check updates.xml file if it's still recent.. if (QFile::exists(filename)) { QFileInfo fi(filename); QDateTime created = fi.created(); int age = created.secsTo(QDateTime::currentDateTime()); - if (age < 0) { // 7200) { + if (age < 900) { QFile file(filename); file.open(QFile::ReadOnly); - ParseUpdateXML(&file); +#ifdef Q_OS_WINDOWS + ParseUpdatesXML(&file); +#else + ParseLatestVersion(&file); +#endif file.close(); return; } @@ -93,14 +119,12 @@ void UpdaterWindow::checkForUpdates() mainwin->Notify(tr("Checking for SleepyHead Updates")); -#if defined(Q_OS_WIN) - // language code? - update_url = QUrl(QString("http://sleepyhead.jedimark.net/packages/win32/Updates.xml"); - downloadUpdateXML(); -#elif defined(Q_OS_MAC) - update_url = QUrl(QString("http://sleepyhead.jedimark.net/packages/mac/Updates.xml")); - +#ifdef Q_OS_WINDOWS + update_url = QUrl(QString("http://sleepyhead.jedimark.net/packages/%1/Updates.xml").arg(platform)); +#else + update_url = QUrl(QString("http://sleepyhead.jedimark.net/releases/LatestVersion-%1").arg(platform)); #endif + downloadUpdateXML(); } void UpdaterWindow::downloadUpdateXML() @@ -143,15 +167,25 @@ void UpdaterWindow::updateFinished(QNetworkReply *reply) ui->plainTextEdit->appendPlainText(tr("%1 bytes received").arg(reply->size())); + +#ifdef Q_OS_WINDOWS QString filename = QApplication::applicationDirPath() + "/Updates.xml"; +#else + QString filename = QApplication::applicationDirPath() + QString("/LatestVersion-%1").arg(platformStr()); +#endif + qDebug() << filename; QFile file(filename); file.open(QFile::WriteOnly); file.write(reply->readAll()); file.close(); file.open(QFile::ReadOnly); - //QTextStream ts(&file); + +#ifdef Q_OS_WINDOWS ParseUpdatesXML(&file); +#else + ParseLatestVersion(&file); +#endif file.close(); reply->deleteLater(); } @@ -403,6 +437,22 @@ void StartMaintenanceTool() #endif } +void UpdaterWindow::ParseLatestVersion(QIODevice *file) +{ + // Temporary Cheat.. for linux & mac, just check the latest version number + QTextStream text(file); + + QString version=text.readAll().trimmed(); + qDebug() << "Latest version is" << version; + int i=compareVersion(version); + if (i>0) { + mainwin->Notify(tr("Version %1 of SleepyHead is available, opening link to download site.").arg(version), STR_TR_SleepyHead); + QDesktopServices::openUrl(QUrl(QString("http://sleepyhead.jedimark.net"))); + } else { + mainwin->Notify(tr("You are already running the latest version."), STR_TR_SleepyHead); + } +} + //New, Qt Installer framework version void UpdaterWindow::ParseUpdatesXML(QIODevice *dev) { diff --git a/sleepyhead/UpdaterWindow.h b/sleepyhead/UpdaterWindow.h index fd104264..c57601a9 100644 --- a/sleepyhead/UpdaterWindow.h +++ b/sleepyhead/UpdaterWindow.h @@ -52,6 +52,7 @@ class UpdaterWindow : public QMainWindow */ void ParseUpdateXML(QIODevice *dev); void ParseUpdatesXML(QIODevice *dev); + void ParseLatestVersion(QIODevice *dev); protected slots: void updateFinished(QNetworkReply *reply); diff --git a/sleepyhead/main.cpp b/sleepyhead/main.cpp index 86296938..348f8d96 100644 --- a/sleepyhead/main.cpp +++ b/sleepyhead/main.cpp @@ -506,7 +506,7 @@ retry_directory: loadChannels(changing_language); - // if (check_updates) { mainwin->CheckForUpdates(); } + if (check_updates) { mainwin->CheckForUpdates(); } w.show(); diff --git a/sleepyhead/mainwindow.cpp b/sleepyhead/mainwindow.cpp index 297c5c17..1d4c9b9d 100644 --- a/sleepyhead/mainwindow.cpp +++ b/sleepyhead/mainwindow.cpp @@ -2795,5 +2795,6 @@ void MainWindow::on_actionReport_a_Bug_triggered() { QSettings settings(getDeveloperName(), getAppName()); QString language = settings.value(LangSetting).toString(); + QDesktopServices::openUrl(QUrl(QString("http://sleepyhead.jedimark.net/report_bugs.php?lang=%1&version=%2&platform=%3").arg(language).arg(VersionString).arg(PlatformString))); } diff --git a/sleepyhead/updateparser.h b/sleepyhead/updateparser.h index e1a3062c..07664dcd 100644 --- a/sleepyhead/updateparser.h +++ b/sleepyhead/updateparser.h @@ -154,5 +154,4 @@ class UpdatesParser QString currentTag; }; - #endif // UPDATEPARSER_H