src/platform/qt/AbstractUpdater.h (view raw)
1/* Copyright (c) 2013-2019 Jeffrey Pfau
2 *
3 * This Source Code Form is subject to the terms of the Mozilla Public
4 * License, v. 2.0. If a copy of the MPL was not distributed with this
5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6#pragma once
7
8#include <QByteArray>
9#include <QFile>
10#include <QObject>
11
12class QNetworkAccessManager;
13class QNetworkReply;
14
15namespace QGBA {
16
17class AbstractUpdater : public QObject {
18Q_OBJECT
19
20public:
21 AbstractUpdater(QObject* parent = nullptr);
22 virtual ~AbstractUpdater() {}
23
24public slots:
25 void checkUpdate();
26 void downloadUpdate();
27
28signals:
29 void updateAvailable(bool);
30 void updateDone(bool);
31
32protected:
33 virtual QUrl manifestLocation() const = 0;
34 virtual QUrl parseManifest(const QByteArray&) const = 0;
35 virtual QString destination() const = 0;
36
37private:
38 void chaseRedirects(QNetworkReply*, void (AbstractUpdater::*cb)(QNetworkReply*));
39 void manifestDownloaded(QNetworkReply*);
40 void updateDownloaded(QNetworkReply*);
41
42 bool m_isUpdating = false;
43 QNetworkAccessManager* m_netman;
44 QByteArray m_manifest;
45};
46
47}