diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 23113dfd71..d8a906e06a 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -95,6 +95,7 @@ const float MIRROR_REARVIEW_DISTANCE = 0.65f; const float MIRROR_REARVIEW_BODY_DISTANCE = 2.3f; const QString CHECK_VERSION_URL = "http://highfidelity.io/latestVersion.xml"; +const QString SKIP_FILENAME = QStandardPaths::writableLocation(QStandardPaths::DataLocation) + "/hifi.skipversion"; void messageHandler(QtMsgType type, const QMessageLogContext& context, const QString &message) { QString messageWithNewLine = message + "\n"; @@ -202,8 +203,6 @@ Application::Application(int& argc, char** argv, timeval &startup_time) : setOrganizationName(applicationInfo.value("organizationName").toString()); setOrganizationDomain(applicationInfo.value("organizationDomain").toString()); - checkVersion(); - qDebug("[VERSION] Build sequence: %s\n", applicationVersion().toStdString().c_str()); _settings = new QSettings(this); @@ -262,7 +261,8 @@ Application::Application(int& argc, char** argv, timeval &startup_time) : // Set the sixense filtering _sixenseManager.setFilter(Menu::getInstance()->isOptionChecked(MenuOption::FilterSixense)); - + + checkVersion(); } Application::~Application() { @@ -4367,31 +4367,28 @@ void Application::updateLocalOctreeCache(bool firstTime) { void Application::checkVersion() { QUrl url(CHECK_VERSION_URL); - QNetworkAccessManager *downloadXML = new QNetworkAccessManager(this); - QNetworkRequest request(url); - connect(downloadXML, SIGNAL(finished(QNetworkReply*)), this, SLOT(parseVersionXml(QNetworkReply*))); - downloadXML->get(request); + QNetworkRequest latestVersionRequest(url); + latestVersionRequest.setAttribute(QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::PreferCache); + _latestVersionReply = getNetworkAccessManager()->get(latestVersionRequest); + + connect(_latestVersionReply, SIGNAL(readyRead()), SLOT(parseVersionXml())); } -void Application::parseVersionXml(QNetworkReply *reply) { - QString *operatingSystem; +void Application::parseVersionXml() { #ifdef Q_OS_WIN32 - operatingSystem = new QString("win"); + QString operatingSystem("win"); #endif #ifdef Q_OS_MAC - operatingSystem = new QString("mac"); + QString operatingSystem("mac"); #endif QString releaseDate; QString releaseNotes; QString latestVersion; - QUrl downloadURL; - QWidget *updateDialog; - - QXmlStreamReader xml(reply); + QXmlStreamReader xml(_latestVersionReply); while (!xml.atEnd() && !xml.hasError()) { QXmlStreamReader::TokenType token = xml.readNext(); @@ -4410,36 +4407,28 @@ void Application::parseVersionXml(QNetworkReply *reply) { } if (xml.name() == operatingSystem) { xml.readNext(); - downloadURL = QUrl(xml.text().toString()); + _downloadUrl = QUrl(xml.text().toString()); } } } if (!shouldSkipVersion(latestVersion) && applicationVersion() != latestVersion) { - updateDialog = new UpdateDialog(_glWidget, releaseNotes, latestVersion, downloadURL); + new UpdateDialog(_glWidget, releaseNotes, latestVersion, _downloadUrl); } + + delete _latestVersionReply; } bool Application::shouldSkipVersion(QString latestVersion) { - QString fileName = QStandardPaths::writableLocation(QStandardPaths::DataLocation); - fileName.append(QString("/hifi.skipversion")); - QFile skipFile(fileName); + QFile skipFile(SKIP_FILENAME); skipFile.open(QIODevice::ReadWrite); - QByteArray skipFileContents = skipFile.readAll(); - QString skipVersion(skipFileContents); - skipFile.close(); - if (skipVersion == latestVersion || applicationVersion() == "dev") { - return true; - } - return false; + QString skipVersion(skipFile.readAll()); + return (skipVersion == latestVersion /*|| applicationVersion() == "dev"*/); } void Application::skipVersion(QString latestVersion) { - QString fileName = QStandardPaths::writableLocation(QStandardPaths::DataLocation); - fileName.append(QString("/hifi.skipversion")); - QFile skipFile(fileName); + QFile skipFile(SKIP_FILENAME); skipFile.open(QIODevice::WriteOnly|QIODevice::Truncate); skipFile.seek(0); skipFile.write(latestVersion.toStdString().c_str()); - skipFile.close(); } diff --git a/interface/src/Application.h b/interface/src/Application.h index acb2901452..86a162e835 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -203,6 +203,8 @@ public: /// set a voxel which is to be rendered with a highlight void setHighlightVoxel(const VoxelDetail& highlightVoxel) { _highlightVoxel = highlightVoxel; } void setIsHighlightVoxel(bool isHighlightVoxel) { _isHighlightVoxel = isHighlightVoxel; } + + QUrl _downloadUrl; public slots: void domainChanged(const QString& domainHostname); @@ -251,7 +253,7 @@ private slots: void shrinkMirrorView(); void resetSensors(); - void parseVersionXml(QNetworkReply *reply); + void parseVersionXml(); private: void resetCamerasOnResizeGL(Camera& camera, int width, int height); @@ -503,6 +505,7 @@ private: void displayUpdateDialog(); bool shouldSkipVersion(QString latestVersion); void skipVersion(QString latestVersion); + QNetworkReply* _latestVersionReply; }; #endif /* defined(__interface__Application__) */ diff --git a/interface/src/ui/UpdateDialog.cpp b/interface/src/ui/UpdateDialog.cpp index 2fd03a48f2..5ee6cd6812 100644 --- a/interface/src/ui/UpdateDialog.cpp +++ b/interface/src/ui/UpdateDialog.cpp @@ -19,17 +19,18 @@ #include "SharedUtil.h" #include "UpdateDialog.h" -UpdateDialog::UpdateDialog(QWidget *parent, QString releaseNotes, QString latestVersion, QUrl downloadURL) : QDialog(parent, Qt::Dialog) { +UpdateDialog::UpdateDialog(QWidget *parent, QString releaseNotes, QString latestVersion, QUrl downloadURL) : + QDialog(parent, Qt::Dialog) { + Application* application = Application::getInstance(); QUiLoader updateDialogLoader; QFile updateDialogUi("resources/ui/updateDialog.ui"); updateDialogUi.open(QFile::ReadOnly); - _dialogWidget = updateDialogLoader.load(&updateDialogUi, parent); - updateDialogUi.close(); + _dialogWidget = updateDialogLoader.load(&updateDialogUi, this); - const QString updateRequired = QString("You are currently running build %1, the latest build released is %2. \ + QString updateRequired = QString("You are currently running build %1, the latest build released is %2. \ Please download and install the most recent release to access the latest features and bug fixes.") .arg(application->applicationVersion(), latestVersion); @@ -43,22 +44,22 @@ UpdateDialog::UpdateDialog(QWidget *parent, QString releaseNotes, QString latest updateContent->setText(updateRequired); - connect(downloadButton, SIGNAL(released()), this, SLOT(handleDownload(QUrl downloadURL))); + connect(downloadButton, SIGNAL(released()), this, SLOT(handleDownload())); connect(skipButton, SIGNAL(released()), this, SLOT(handleSkip())); connect(closeButton, SIGNAL(released()), this, SLOT(handleClose())); _dialogWidget->show(); } -void UpdateDialog::handleDownload(QUrl downloadURL) { +void UpdateDialog::handleDownload() { Application* application = Application::getInstance(); - QDesktopServices::openUrl(downloadURL); + QDesktopServices::openUrl(application->_downloadUrl); application->quit(); } void UpdateDialog::handleSkip() { - this->_dialogWidget->close(); + this->close(); } void UpdateDialog::handleClose() { - this->_dialogWidget->close(); + this->close(); } \ No newline at end of file diff --git a/interface/src/ui/UpdateDialog.h b/interface/src/ui/UpdateDialog.h index 04973620e6..690d0a9f0d 100644 --- a/interface/src/ui/UpdateDialog.h +++ b/interface/src/ui/UpdateDialog.h @@ -18,13 +18,13 @@ class UpdateDialog : public QDialog { Q_OBJECT public: - UpdateDialog(QWidget*, QString releaseNotes, QString latestVersion, QUrl downloadURL); + UpdateDialog(QWidget* parent, QString releaseNotes, QString latestVersion, QUrl downloadURL); private: QWidget* _dialogWidget; private slots: - void handleDownload(QUrl downloadURL); + void handleDownload(); void handleSkip(); void handleClose(); };