138 lines
5.0 KiB
C++
138 lines
5.0 KiB
C++
![]() |
/*
|
||
|
* Copyright (c) 2014-2016 Alex Spataru <alex_spataru@outlook.com>
|
||
|
*
|
||
|
* This work is free. You can redistribute it and/or modify it under the
|
||
|
* terms of the Do What The Fuck You Want To Public License, Version 2,
|
||
|
* as published by Sam Hocevar. See the COPYING file for more details.
|
||
|
*/
|
||
|
|
||
|
#include "Window.h"
|
||
|
#include "ui_Window.h"
|
||
|
|
||
|
#include <QDebug>
|
||
|
#include <QSimpleUpdater.h>
|
||
|
|
||
|
//==============================================================================
|
||
|
// Define the URL of the Update Definitions file
|
||
|
//==============================================================================
|
||
|
|
||
|
static const QString DEFS_URL = "https://raw.githubusercontent.com/"
|
||
|
"alex-spataru/QSimpleUpdater/master/tutorial/"
|
||
|
"definitions/updates.json";
|
||
|
|
||
|
//==============================================================================
|
||
|
// Window::Window
|
||
|
//==============================================================================
|
||
|
|
||
|
Window::Window (QWidget* parent) : QMainWindow (parent)
|
||
|
{
|
||
|
m_ui = new Ui::Window;
|
||
|
m_ui->setupUi (this);
|
||
|
|
||
|
setWindowTitle (qApp->applicationName());
|
||
|
|
||
|
/* QSimpleUpdater is single-instance */
|
||
|
m_updater = QSimpleUpdater::getInstance();
|
||
|
|
||
|
/* Check for updates when the "Check For Updates" button is clicked */
|
||
|
connect (m_updater, SIGNAL (checkingFinished (QString)),
|
||
|
this, SLOT (updateChangelog (QString)));
|
||
|
connect (m_updater, SIGNAL (appcastDownloaded (QString, QByteArray)),
|
||
|
this, SLOT (displayAppcast (QString, QByteArray)));
|
||
|
|
||
|
/* React to button clicks */
|
||
|
connect (m_ui->resetButton, SIGNAL (clicked()),
|
||
|
this, SLOT (resetFields()));
|
||
|
connect (m_ui->closeButton, SIGNAL (clicked()),
|
||
|
this, SLOT (close()));
|
||
|
connect (m_ui->checkButton, SIGNAL (clicked()),
|
||
|
this, SLOT (checkForUpdates()));
|
||
|
|
||
|
/* Resize the dialog to fit */
|
||
|
setMinimumSize (minimumSizeHint());
|
||
|
resize (minimumSizeHint());
|
||
|
|
||
|
/* Reset the UI state */
|
||
|
resetFields();
|
||
|
}
|
||
|
|
||
|
//==============================================================================
|
||
|
// Window::~Window
|
||
|
//==============================================================================
|
||
|
|
||
|
Window::~Window()
|
||
|
{
|
||
|
delete m_ui;
|
||
|
}
|
||
|
|
||
|
//==============================================================================
|
||
|
// Window::checkForUpdates
|
||
|
//==============================================================================
|
||
|
|
||
|
void Window::resetFields()
|
||
|
{
|
||
|
m_ui->installedVersion->setText ("0.1");
|
||
|
m_ui->customAppcast->setChecked (false);
|
||
|
m_ui->enableDownloader->setChecked (true);
|
||
|
m_ui->showAllNotifcations->setChecked (false);
|
||
|
m_ui->showUpdateNotifications->setChecked (true);
|
||
|
m_ui->mandatoryUpdate->setChecked (false);
|
||
|
|
||
|
}
|
||
|
|
||
|
//==============================================================================
|
||
|
// Window::checkForUpdates
|
||
|
//==============================================================================
|
||
|
|
||
|
void Window::checkForUpdates()
|
||
|
{
|
||
|
/* Get settings from the UI */
|
||
|
QString version = m_ui->installedVersion->text();
|
||
|
bool customAppcast = m_ui->customAppcast->isChecked();
|
||
|
bool downloaderEnabled = m_ui->enableDownloader->isChecked();
|
||
|
bool notifyOnFinish = m_ui->showAllNotifcations->isChecked();
|
||
|
bool notifyOnUpdate = m_ui->showUpdateNotifications->isChecked();
|
||
|
bool mandatoryUpdate = m_ui->mandatoryUpdate->isChecked();
|
||
|
|
||
|
/* Apply the settings */
|
||
|
m_updater->setModuleVersion (DEFS_URL, version);
|
||
|
m_updater->setNotifyOnFinish (DEFS_URL, notifyOnFinish);
|
||
|
m_updater->setNotifyOnUpdate (DEFS_URL, notifyOnUpdate);
|
||
|
m_updater->setUseCustomAppcast (DEFS_URL, customAppcast);
|
||
|
m_updater->setDownloaderEnabled (DEFS_URL, downloaderEnabled);
|
||
|
m_updater->setMandatoryUpdate (DEFS_URL, mandatoryUpdate);
|
||
|
|
||
|
/* Check for updates */
|
||
|
m_updater->checkForUpdates (DEFS_URL);
|
||
|
}
|
||
|
|
||
|
//==============================================================================
|
||
|
// Window::updateChangelog
|
||
|
//==============================================================================
|
||
|
|
||
|
void Window::updateChangelog (const QString& url)
|
||
|
{
|
||
|
if (url == DEFS_URL)
|
||
|
m_ui->changelogText->setText (m_updater->getChangelog (url));
|
||
|
}
|
||
|
|
||
|
|
||
|
//==============================================================================
|
||
|
// Window::displayAppcast
|
||
|
//==============================================================================
|
||
|
|
||
|
void Window::displayAppcast (const QString& url, const QByteArray& reply)
|
||
|
{
|
||
|
if (url == DEFS_URL) {
|
||
|
QString text = "This is the downloaded appcast: <p><pre>" +
|
||
|
QString::fromUtf8 (reply) +
|
||
|
"</pre></p><p> If you need to store more information on the "
|
||
|
"appcast (or use another format), just use the "
|
||
|
"<b>QSimpleUpdater::setCustomAppcast()</b> function. "
|
||
|
"It allows your application to interpret the appcast "
|
||
|
"using your code and not QSU's code.</p>";
|
||
|
|
||
|
m_ui->changelogText->setText (text);
|
||
|
}
|
||
|
}
|