Implemented a "download and install" dialog
This commit is contained in:
parent
48b8195655
commit
d88c4955eb
@ -63,6 +63,9 @@ void Example::checkForUpdates() {
|
|||||||
updater->setReferenceUrl("https://raw.githubusercontent.com/alex-97/"
|
updater->setReferenceUrl("https://raw.githubusercontent.com/alex-97/"
|
||||||
"QSimpleUpdater/Files-for-example-project/current_version.txt");
|
"QSimpleUpdater/Files-for-example-project/current_version.txt");
|
||||||
|
|
||||||
|
// Tell the updater where to download the update, its recommended to use direct links
|
||||||
|
updater->setDownloadUrl("https://github.com/alex-97/QSimpleUpdater/archive/master.zip");
|
||||||
|
|
||||||
// Finally, check for updates...
|
// Finally, check for updates...
|
||||||
updater->checkForUpdates();
|
updater->checkForUpdates();
|
||||||
}
|
}
|
||||||
@ -81,6 +84,7 @@ void Example::onCheckingFinished() {
|
|||||||
QMessageBox::information(this, tr("Update available"),
|
QMessageBox::information(this, tr("Update available"),
|
||||||
tr("There's a newer version available! The latest version is ") +
|
tr("There's a newer version available! The latest version is ") +
|
||||||
updater->latestVersion());
|
updater->latestVersion());
|
||||||
|
updater->downloadLatestVersion();
|
||||||
}
|
}
|
||||||
|
|
||||||
// The installed version is equal or greater to the "official" latest version,
|
// The installed version is equal or greater to the "official" latest version,
|
||||||
|
@ -8,8 +8,10 @@
|
|||||||
|
|
||||||
QT += network
|
QT += network
|
||||||
|
|
||||||
HEADERS += $$PWD/src/qsimpleupdater.h
|
HEADERS += $$PWD/src/qsimpleupdater.h \
|
||||||
SOURCES += $$PWD/src/qsimpleupdater.cpp
|
$$PWD/src/dialogs/download_dialog.h
|
||||||
|
SOURCES += $$PWD/src/qsimpleupdater.cpp \
|
||||||
|
$$PWD/src/dialogs/download_dialog.cpp
|
||||||
OTHER_FILES += $$PWD/src/QSimpleUpdater
|
OTHER_FILES += $$PWD/src/QSimpleUpdater
|
||||||
|
|
||||||
INCLUDEPATH += $$PWD/src
|
INCLUDEPATH += $$PWD/src
|
||||||
@ -22,3 +24,9 @@ win32* {
|
|||||||
CONFIG += openssl-linked
|
CONFIG += openssl-linked
|
||||||
LIBS += -L$$PWD/dependencies/win32/ -llibeay32
|
LIBS += -L$$PWD/dependencies/win32/ -llibeay32
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RESOURCES += \
|
||||||
|
$$PWD/res/res.qrc
|
||||||
|
|
||||||
|
FORMS += \
|
||||||
|
$$PWD/src/dialogs/download_dialog.ui
|
||||||
|
BIN
QSimpleUpdater/res/internet_icon.png
Normal file
BIN
QSimpleUpdater/res/internet_icon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 8.6 KiB |
5
QSimpleUpdater/res/res.qrc
Normal file
5
QSimpleUpdater/res/res.qrc
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
<RCC>
|
||||||
|
<qresource prefix="/icons">
|
||||||
|
<file>internet_icon.png</file>
|
||||||
|
</qresource>
|
||||||
|
</RCC>
|
188
QSimpleUpdater/src/dialogs/download_dialog.cpp
Normal file
188
QSimpleUpdater/src/dialogs/download_dialog.cpp
Normal file
@ -0,0 +1,188 @@
|
|||||||
|
//
|
||||||
|
// This file is part of QSimpleUpdater
|
||||||
|
//
|
||||||
|
// Copyright (c) 2014 Alex Spataru <alex_spataru@gmail.com>
|
||||||
|
//
|
||||||
|
// Please check the license.txt file for more information.
|
||||||
|
//
|
||||||
|
|
||||||
|
#include "download_dialog.h"
|
||||||
|
#include "ui_download_dialog.h"
|
||||||
|
|
||||||
|
DownloadDialog::DownloadDialog(QWidget *parent) :
|
||||||
|
QWidget(parent),
|
||||||
|
ui(new Ui::DownloadDialog)
|
||||||
|
{
|
||||||
|
// Setup the UI
|
||||||
|
ui->setupUi(this);
|
||||||
|
ui->installButton->setEnabled(false);
|
||||||
|
|
||||||
|
// Connect SIGNALS/SLOTS
|
||||||
|
connect(ui->installButton, SIGNAL(clicked()), this, SLOT(openDownload()));
|
||||||
|
connect(ui->cancelButton, SIGNAL(clicked()), this, SLOT(cancelDownload()));
|
||||||
|
|
||||||
|
// Initialize the network access manager
|
||||||
|
m_manager = new QNetworkAccessManager(this);
|
||||||
|
|
||||||
|
// Avoid SSL issues
|
||||||
|
connect(m_manager, SIGNAL(sslErrors(QNetworkReply*,QList<QSslError>)),
|
||||||
|
this, SLOT(ignoreSslErrors(QNetworkReply*,QList<QSslError>)));
|
||||||
|
}
|
||||||
|
|
||||||
|
DownloadDialog::~DownloadDialog()
|
||||||
|
{
|
||||||
|
delete ui;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DownloadDialog::beginDownload(const QUrl &url)
|
||||||
|
{
|
||||||
|
// Reset the UI
|
||||||
|
ui->progressBar->setValue(0);
|
||||||
|
ui->installButton->setEnabled(false);
|
||||||
|
ui->downloadLabel->setText(tr("Downloading update..."));
|
||||||
|
|
||||||
|
// Begin the download
|
||||||
|
m_reply = m_manager->get(QNetworkRequest(url));
|
||||||
|
|
||||||
|
// Update the progress bar value automatically
|
||||||
|
connect(m_reply, SIGNAL(downloadProgress(qint64,qint64)),
|
||||||
|
this, SLOT(updateProgress(qint64,qint64)));
|
||||||
|
|
||||||
|
// Write the file to the hard disk once the download is finished
|
||||||
|
connect(m_reply, SIGNAL(finished()), this, SLOT(downloadFinished()));
|
||||||
|
|
||||||
|
// Show the dialog
|
||||||
|
showNormal();
|
||||||
|
}
|
||||||
|
|
||||||
|
void DownloadDialog::openDownload()
|
||||||
|
{
|
||||||
|
if (!m_path.isEmpty()) {
|
||||||
|
QString url = m_path;
|
||||||
|
|
||||||
|
// Build a correct URL to open local files
|
||||||
|
if (url.startsWith("/"))
|
||||||
|
url = "file://" + url;
|
||||||
|
else
|
||||||
|
url = "file:///" + url;
|
||||||
|
|
||||||
|
// Let the system open the downloaded file
|
||||||
|
QDesktopServices::openUrl(url);
|
||||||
|
}
|
||||||
|
|
||||||
|
else {
|
||||||
|
qWarning() << "QSimpleUpdater: cannot open downloaded file!";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void DownloadDialog::cancelDownload()
|
||||||
|
{
|
||||||
|
// Cancel download
|
||||||
|
m_reply->abort();
|
||||||
|
|
||||||
|
// Close the dialog
|
||||||
|
close();
|
||||||
|
}
|
||||||
|
|
||||||
|
void DownloadDialog::downloadFinished()
|
||||||
|
{
|
||||||
|
// Setup the UI
|
||||||
|
ui->installButton->setEnabled(true);
|
||||||
|
|
||||||
|
// Write the file
|
||||||
|
QByteArray data = m_reply->readAll();
|
||||||
|
|
||||||
|
if (!data.isEmpty()) {
|
||||||
|
// Create a QFile with the name of the downloaded file
|
||||||
|
QStringList list = m_reply->url().toString().split("/");
|
||||||
|
QFile file(QDir::tempPath() + "/" + list.at(list.count() - 1));
|
||||||
|
|
||||||
|
// Write download data to the opened file
|
||||||
|
if (file.open(QIODevice::WriteOnly)) {
|
||||||
|
file.write(data);
|
||||||
|
m_path = file.fileName();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Show a warning if we cannot open the file for writting
|
||||||
|
else {
|
||||||
|
qWarning() << "QSimpleUpdater: cannot write downloaded data!";
|
||||||
|
}
|
||||||
|
|
||||||
|
// Close the file
|
||||||
|
file.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
else {
|
||||||
|
qWarning() << "QSimpleUpdater: invalid download data!";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void DownloadDialog::updateProgress(qint64 received, qint64 total)
|
||||||
|
{
|
||||||
|
// We know the size of the download, so we can calculate the progress....
|
||||||
|
if (total > 0) {
|
||||||
|
ui->progressBar->setMinimum(0);
|
||||||
|
ui->progressBar->setMaximum(100);
|
||||||
|
|
||||||
|
// Calculate and show download progress
|
||||||
|
int _progress = (int) ((received * 100) / total);
|
||||||
|
ui->progressBar->setValue(_progress);
|
||||||
|
ui->downloadLabel->setText(tr("Downloading update (%1%)...").arg(_progress));
|
||||||
|
|
||||||
|
// Get size information
|
||||||
|
QString _total_string;
|
||||||
|
QString _received_string;
|
||||||
|
|
||||||
|
float _total = total;
|
||||||
|
float _received = received;
|
||||||
|
|
||||||
|
// Calculate the lenght unit for
|
||||||
|
// the total size of the download
|
||||||
|
if (_total < 1024) {
|
||||||
|
_total_string = tr("%1 bytes").arg(_total);
|
||||||
|
} else if (_total < 1024 * 1024) {
|
||||||
|
_total = roundNumber(_total / 1024);
|
||||||
|
_total_string = tr("%1 KB").arg(_total);
|
||||||
|
} else {
|
||||||
|
_total = roundNumber(_total / (1024 * 1024));
|
||||||
|
_total_string = tr("%1 MB").arg(_total);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Calculate the lenght unit for
|
||||||
|
// the received data of the download
|
||||||
|
if (_received < 1024) {
|
||||||
|
_received_string = tr("%1 bytes").arg(_received);
|
||||||
|
} else if (received < 1024 * 1024) {
|
||||||
|
_received = roundNumber(_received / 1024);
|
||||||
|
_received_string = tr("%1 KB").arg(_received);
|
||||||
|
} else {
|
||||||
|
_received = roundNumber(_received / (1024 * 1024));
|
||||||
|
_received_string = tr("%1 MB").arg(_received);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update the progress label
|
||||||
|
ui->progressLabel->setText(_received_string + " " + tr("of") + " " + _total_string);
|
||||||
|
}
|
||||||
|
|
||||||
|
// We do not know the size of the download, so we improvise...
|
||||||
|
else {
|
||||||
|
|
||||||
|
// Enable a marquee animation
|
||||||
|
ui->progressBar->setValue(-1);
|
||||||
|
ui->progressBar->setMinimum(0);
|
||||||
|
ui->progressBar->setMaximum(0);
|
||||||
|
|
||||||
|
ui->downloadLabel->setText(tr("Downloading update..."));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void DownloadDialog::ignoreSslErrors (QNetworkReply *reply, const QList<QSslError> &error)
|
||||||
|
{
|
||||||
|
reply->ignoreSslErrors (error);
|
||||||
|
}
|
||||||
|
|
||||||
|
float DownloadDialog::roundNumber(const float &input)
|
||||||
|
{
|
||||||
|
// Round the input number to two decimal places
|
||||||
|
return roundf(input * 100) / 100;
|
||||||
|
}
|
44
QSimpleUpdater/src/dialogs/download_dialog.h
Normal file
44
QSimpleUpdater/src/dialogs/download_dialog.h
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
#ifndef DOWNLOAD_DIALOG_H
|
||||||
|
#define DOWNLOAD_DIALOG_H
|
||||||
|
|
||||||
|
#include <QDir>
|
||||||
|
#include <QWidget>
|
||||||
|
#include <QNetworkReply>
|
||||||
|
#include <QDesktopServices>
|
||||||
|
#include <QNetworkAccessManager>
|
||||||
|
|
||||||
|
#include <math.h>
|
||||||
|
|
||||||
|
namespace Ui {
|
||||||
|
class DownloadDialog;
|
||||||
|
}
|
||||||
|
|
||||||
|
class DownloadDialog : public QWidget
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit DownloadDialog(QWidget *parent = 0);
|
||||||
|
~DownloadDialog();
|
||||||
|
|
||||||
|
void beginDownload(const QUrl &url);
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void openDownload();
|
||||||
|
void cancelDownload();
|
||||||
|
void downloadFinished();
|
||||||
|
void updateProgress(qint64 received, qint64 total);
|
||||||
|
void ignoreSslErrors(QNetworkReply *reply, const QList<QSslError> &error);
|
||||||
|
|
||||||
|
private:
|
||||||
|
Ui::DownloadDialog *ui;
|
||||||
|
|
||||||
|
QString m_path;
|
||||||
|
|
||||||
|
QNetworkReply *m_reply;
|
||||||
|
QNetworkAccessManager *m_manager;
|
||||||
|
|
||||||
|
float roundNumber(const float &input);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
144
QSimpleUpdater/src/dialogs/download_dialog.ui
Normal file
144
QSimpleUpdater/src/dialogs/download_dialog.ui
Normal file
@ -0,0 +1,144 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>DownloadDialog</class>
|
||||||
|
<widget class="QWidget" name="DownloadDialog">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>385</width>
|
||||||
|
<height>168</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>0</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>16777215</width>
|
||||||
|
<height>16777215</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Updater</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
||||||
|
<property name="spacing">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="leftMargin">
|
||||||
|
<number>12</number>
|
||||||
|
</property>
|
||||||
|
<property name="topMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="rightMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="bottomMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="downloadIcon">
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
<property name="pixmap">
|
||||||
|
<pixmap resource="../../res/res.qrc">:/icons/internet_icon.png</pixmap>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QWidget" name="widget_2" native="true">
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||||
|
<item>
|
||||||
|
<widget class="QWidget" name="progressFrame" native="true">
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="downloadLabel">
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<weight>75</weight>
|
||||||
|
<bold>true</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Downloading update...</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QProgressBar" name="progressBar">
|
||||||
|
<property name="value">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="invertedAppearance">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="progressLabel">
|
||||||
|
<property name="text">
|
||||||
|
<string>0 kb / 0 kb</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QWidget" name="buttonFrame" native="true">
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||||
|
<item>
|
||||||
|
<spacer name="buttonSpacer">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>40</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="cancelButton">
|
||||||
|
<property name="text">
|
||||||
|
<string>Cancel</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QPushButton" name="installButton">
|
||||||
|
<property name="text">
|
||||||
|
<string>Install</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<resources>
|
||||||
|
<include location="../../res/res.qrc"/>
|
||||||
|
</resources>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
@ -8,25 +8,23 @@
|
|||||||
|
|
||||||
#include "qsimpleupdater.h"
|
#include "qsimpleupdater.h"
|
||||||
|
|
||||||
QSimpleUpdater::QSimpleUpdater(QObject *parent) : QObject(parent)
|
QSimpleUpdater::QSimpleUpdater(QObject *parent)
|
||||||
|
: QObject(parent)
|
||||||
|
, m_changelog_downloaded(false)
|
||||||
|
, m_version_check_finished(false)
|
||||||
|
, m_new_version_available(false)
|
||||||
{
|
{
|
||||||
m_new_version_available = false;
|
m_downloadDialog = new DownloadDialog();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
QString QSimpleUpdater::changeLog() {
|
// Return the contents of the downloaded changelog
|
||||||
// Return the contents of the downloaded changelog
|
QString QSimpleUpdater::changeLog() const {
|
||||||
if (!m_changelog.isEmpty()) {
|
if (m_changelog.isEmpty()) {
|
||||||
return m_changelog;
|
|
||||||
}
|
|
||||||
|
|
||||||
// If the changelog is empty, we issue a warning message in
|
|
||||||
// the console and return an empty string
|
|
||||||
else {
|
|
||||||
qWarning() << "QSimpleUpdater: change log is empty,"
|
qWarning() << "QSimpleUpdater: change log is empty,"
|
||||||
<< "did you call setChangelogUrl() and checkForUpdates()?";
|
<< "did you call setChangelogUrl() and checkForUpdates()?";
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
|
return m_changelog;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QSimpleUpdater::checkForUpdates() {
|
void QSimpleUpdater::checkForUpdates() {
|
||||||
@ -56,38 +54,7 @@ void QSimpleUpdater::checkForUpdates() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
QString QSimpleUpdater::latestVersion() {
|
void QSimpleUpdater::openDownloadLink() {
|
||||||
// Return the application version referenced by the string
|
|
||||||
// that we downloaded
|
|
||||||
if (!m_latest_version.isEmpty()) {
|
|
||||||
return m_latest_version;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Issue a warning message in the case that the downloaded
|
|
||||||
// application version string is empty
|
|
||||||
else {
|
|
||||||
qWarning() << "QSimpleUpdater: latest version is empty,"
|
|
||||||
<< "did you call checkForUpdates() and setReferenceUrl()?";
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
QString QSimpleUpdater::installedVersion() {
|
|
||||||
// Return the string issued by the user in the setApplicationVersion() function
|
|
||||||
if (!m_installed_version.isEmpty()) {
|
|
||||||
return m_installed_version;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Issue a warning message in the case that the installed application
|
|
||||||
// version is empty
|
|
||||||
else {
|
|
||||||
qWarning() << "QSimpleUpdater: installed version is empty,"
|
|
||||||
<< "did you call setApplicationVersion()?";
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void QSimpleUpdater::downloadLatestVersion() {
|
|
||||||
// Open the download URL in a web browser
|
// Open the download URL in a web browser
|
||||||
if (!m_download_url.isEmpty()) {
|
if (!m_download_url.isEmpty()) {
|
||||||
QDesktopServices::openUrl(m_download_url);
|
QDesktopServices::openUrl(m_download_url);
|
||||||
@ -100,59 +67,87 @@ void QSimpleUpdater::downloadLatestVersion() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool QSimpleUpdater::newerVersionAvailable() {
|
// Return the application version referenced by the string
|
||||||
|
// that we downloaded
|
||||||
|
QString QSimpleUpdater::latestVersion() const {
|
||||||
|
if (m_latest_version.isEmpty()) {
|
||||||
|
qWarning() << "QSimpleUpdater: latest version is empty,"
|
||||||
|
<< "did you call checkForUpdates() and setReferenceUrl()?";
|
||||||
|
}
|
||||||
|
return m_latest_version;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Return the string issued by the user in the setApplicationVersion() function
|
||||||
|
QString QSimpleUpdater::installedVersion() const {
|
||||||
|
if (m_installed_version.isEmpty()) {
|
||||||
|
qWarning() << "QSimpleUpdater: installed version is empty,"
|
||||||
|
<< "did you call setApplicationVersion()?";
|
||||||
|
}
|
||||||
|
|
||||||
|
return m_installed_version;
|
||||||
|
}
|
||||||
|
|
||||||
|
void QSimpleUpdater::downloadLatestVersion() {
|
||||||
|
// Show the download dialog
|
||||||
|
if (!m_download_url.isEmpty()) {
|
||||||
|
m_downloadDialog->beginDownload(m_download_url);
|
||||||
|
}
|
||||||
|
|
||||||
|
// The m_download_url is empty, so we issue another warning message
|
||||||
|
else {
|
||||||
|
qWarning() << "QSimpleUpdater: cannot download latest version,"
|
||||||
|
<< "did you call setDownloadUrl() and checkForUpdates()?";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool QSimpleUpdater::newerVersionAvailable() const {
|
||||||
return m_new_version_available;
|
return m_new_version_available;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QSimpleUpdater::setDownloadUrl(const QString url) {
|
// Change the download URL if the issued URL is valid
|
||||||
// Change the download URL if the issued URL is valid
|
void QSimpleUpdater::setDownloadUrl(const QString &url) {
|
||||||
|
Q_ASSERT(!url.isEmpty());
|
||||||
|
|
||||||
if (!url.isEmpty()) {
|
if (!url.isEmpty()) {
|
||||||
m_download_url.setUrl(url);
|
m_download_url.setUrl(url);
|
||||||
}
|
} else {
|
||||||
|
|
||||||
// The issued URL is ilegal, so we warn the user
|
|
||||||
else {
|
|
||||||
qWarning() << "QSimpleUpdater: input URL cannot be empty!";
|
qWarning() << "QSimpleUpdater: input URL cannot be empty!";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void QSimpleUpdater::setReferenceUrl(const QString url) {
|
// Change the reference URL if the issued URL is valid
|
||||||
// Change the reference URL if the issued URL is valid
|
void QSimpleUpdater::setReferenceUrl(const QString &url) {
|
||||||
|
Q_ASSERT(!url.isEmpty());
|
||||||
|
|
||||||
if (!url.isEmpty()) {
|
if (!url.isEmpty()) {
|
||||||
m_reference_url.setUrl(url);
|
m_reference_url.setUrl(url);
|
||||||
}
|
} else {
|
||||||
|
|
||||||
// The issued URL is ilegal, so we warn the user
|
|
||||||
else {
|
|
||||||
qWarning() << "QSimpleUpdater: input URL cannot be empty!";
|
qWarning() << "QSimpleUpdater: input URL cannot be empty!";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void QSimpleUpdater::setChangelogUrl(const QString url) {
|
// Change the changelog URL if the issued URL is valid
|
||||||
// Change the changelog URL if the issued URL is valid
|
void QSimpleUpdater::setChangelogUrl(const QString &url) {
|
||||||
|
Q_ASSERT(!url.isEmpty());
|
||||||
|
|
||||||
if (!url.isEmpty()) {
|
if (!url.isEmpty()) {
|
||||||
m_changelog_url.setUrl(url);
|
m_changelog_url.setUrl(url);
|
||||||
}
|
} else {
|
||||||
|
|
||||||
// The issued URL is ilegal, so we warn the user
|
|
||||||
else {
|
|
||||||
qWarning() << "QSimpleUpdater: input URL cannot be empty!";
|
qWarning() << "QSimpleUpdater: input URL cannot be empty!";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void QSimpleUpdater::setApplicationVersion(const QString version) {
|
// Change the installed application version if the issued string is valid
|
||||||
// Change the installed application version if the issued string is valid
|
void QSimpleUpdater::setApplicationVersion(const QString &version) {
|
||||||
|
Q_ASSERT(!version.isEmpty());
|
||||||
|
|
||||||
if (!version.isEmpty()) {
|
if (!version.isEmpty()) {
|
||||||
m_installed_version = version;
|
m_installed_version = version;
|
||||||
}
|
} else {
|
||||||
|
|
||||||
// The application version cannot be empty, so we warn the user
|
|
||||||
else {
|
|
||||||
qWarning() << "QSimpleUpdater: input string cannot be empty!";
|
qWarning() << "QSimpleUpdater: input string cannot be empty!";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void QSimpleUpdater::checkDownloadedVersion(QNetworkReply *reply) {
|
void QSimpleUpdater::checkDownloadedVersion(QNetworkReply *reply) {
|
||||||
bool _new_update = false;
|
bool _new_update = false;
|
||||||
|
|
||||||
@ -261,6 +256,6 @@ void QSimpleUpdater::processDownloadedChangelog(QNetworkReply *reply) {
|
|||||||
emit checkingFinished();
|
emit checkingFinished();
|
||||||
}
|
}
|
||||||
|
|
||||||
void QSimpleUpdater::ignoreSslErrors (QNetworkReply *reply, QList<QSslError> error) {
|
void QSimpleUpdater::ignoreSslErrors (QNetworkReply *reply, const QList<QSslError> &error) {
|
||||||
reply->ignoreSslErrors (error);
|
reply->ignoreSslErrors (error);
|
||||||
}
|
}
|
||||||
|
@ -13,29 +13,32 @@
|
|||||||
#include <QSslConfiguration>
|
#include <QSslConfiguration>
|
||||||
#include <QNetworkAccessManager>
|
#include <QNetworkAccessManager>
|
||||||
|
|
||||||
|
#include "dialogs/download_dialog.h"
|
||||||
|
|
||||||
class QSimpleUpdater : public QObject {
|
class QSimpleUpdater : public QObject {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
QSimpleUpdater(QObject *parent = 0);
|
QSimpleUpdater(QObject *parent = 0);
|
||||||
|
|
||||||
QString changeLog();
|
QString changeLog() const;
|
||||||
void checkForUpdates();
|
void checkForUpdates();
|
||||||
QString latestVersion();
|
void openDownloadLink();
|
||||||
QString installedVersion();
|
QString latestVersion() const;
|
||||||
|
QString installedVersion() const;
|
||||||
void downloadLatestVersion();
|
void downloadLatestVersion();
|
||||||
bool newerVersionAvailable();
|
bool newerVersionAvailable() const;
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void setDownloadUrl(const QString url);
|
void setDownloadUrl(const QString &url);
|
||||||
void setReferenceUrl(const QString url);
|
void setReferenceUrl(const QString &url);
|
||||||
void setChangelogUrl(const QString url);
|
void setChangelogUrl(const QString &url);
|
||||||
void setApplicationVersion(const QString version);
|
void setApplicationVersion(const QString &version);
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void checkDownloadedVersion(QNetworkReply *reply);
|
void checkDownloadedVersion(QNetworkReply *reply);
|
||||||
void processDownloadedChangelog(QNetworkReply *reply);
|
void processDownloadedChangelog(QNetworkReply *reply);
|
||||||
void ignoreSslErrors(QNetworkReply *reply, QList<QSslError> error);
|
void ignoreSslErrors(QNetworkReply *reply, const QList<QSslError> &error);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void checkingFinished();
|
void checkingFinished();
|
||||||
@ -55,6 +58,8 @@ private:
|
|||||||
bool m_version_check_finished;
|
bool m_version_check_finished;
|
||||||
|
|
||||||
bool m_new_version_available;
|
bool m_new_version_available;
|
||||||
|
|
||||||
|
DownloadDialog *m_downloadDialog;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user