Files
edgetx-gx12/companion/src/updates/updateinterface.h
T
Neil HorneandGitHub fec64a964d fix(cpn): Selection of sound packs in update process (#3848)
* chore(cpn): increase github REST api page size for sound packs

* chore(cpn): add selection mode parameter to chooser dialog

* chore(cpn): remove cli debug messages when progress dialog available

* chore(cpn): carve out filterAssets from setFilteredAssets and call new function

* fix(cpn): refactor update sounds asset filtering

* chore(cpn): move code block

* fix(cpn): remove trailing hyphen from default sounds asset filter
2023-09-07 21:23:02 +10:00

152 lines
5.0 KiB
C++

/*
* Copyright (C) EdgeTX
*
* Based on code named
* opentx - https://github.com/opentx/opentx
* th9x - http://code.google.com/p/th9x
* er9x - http://code.google.com/p/er9x
* gruvin9x - http://code.google.com/p/gruvin9x
*
* License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
#pragma once
#include "constants.h"
#include "appdata.h"
#include "updatestatus.h"
#include "updatenetwork.h"
#include "repo.h"
#include "updateparameters.h"
#include <QtCore>
#include <QWidget>
class UpdateInterface : public QWidget
{
Q_OBJECT
public:
// The CID is used as a key to the application settings therefore
// ids must be explicit so no renumbering if components removed
// new components must be added to the end of the enum
enum ComponentIdentity {
CID_Unknown = -1,
CID_SDCard = 0,
CID_Firmware = 1,
CID_Sounds = 2,
CID_Themes = 3,
CID_MultiProtocol = 4,
CID_Companion = 5,
};
Q_ENUM(ComponentIdentity)
enum UpdateFlags {
UPDFLG_None = 0,
UPDFLG_Update = 1 << 1,
UPDFLG_Locked = 1 << 2,
UPDFLG_Preparation = 1 << 3,
UPDFLG_Download = 1 << 4,
UPDFLG_Decompress = 1 << 5,
UPDFLG_CopyDest = 1 << 6,
UPDFLG_CopyFiles = 1 << 7,
UPDFLG_CopyStructure = 1 << 8,
UPDFLG_Housekeeping = 1 << 9,
UPDFLG_AsyncInstall = 1 << 10,
UPDFLG_DelDownloads = 1 << 11,
UPDFLG_DelDecompress = 1 << 12,
UPDFLG_Common_Asset = UPDFLG_Download | UPDFLG_Decompress | UPDFLG_CopyDest,
UPDFLG_Common = UPDFLG_Common_Asset | UPDFLG_Preparation | UPDFLG_Housekeeping,
};
Q_ENUM(UpdateFlags)
explicit UpdateInterface(QWidget * parent, ComponentIdentity id, QString name);
virtual ~UpdateInterface();
virtual void assetSettingsSave();
virtual const bool isReleaseLatest();
virtual const bool isUpdateAvailable();
virtual const bool isVersionLatest(const QString & current, const QString & latest);
virtual const QString releaseCurrent();
virtual const QString releaseLatest();
virtual const QString releaseUpdate();
virtual bool update(ProgressWidget * progress = nullptr);
virtual const QString versionCurrent();
const int id() const;
const bool isUpdateable() const;
const QString name() const;
UpdateParameters* const params() const;
void releaseClear();
const QStringList releaseList();
void resetEnvironment();
void setReleaseChannel(const int channel);
void setRunUpdate();
protected:
virtual void assetSettingsInit() = 0;
virtual void assetSettingsLoad();
virtual bool asyncInstall();
virtual bool copyAsset();
virtual bool copyToDestination();
virtual bool decompress();
virtual bool download();
virtual bool flagAssets();
virtual bool housekeeping();
virtual bool preparation();
bool copyFiles();
bool copyFlaggedAssets();
bool copyStructure();
bool decompressAsset(int row);
const QString decompressDir() const;
bool decompressFlaggedAssets();
const QString downloadDir() const;
bool downloadFlaggedAssets();
bool filterAssets(const UpdateParameters::AssetParams & ap);
void init(QString repo, QString nightly = "", int resultsPerPage = -1);
const bool isSettingsIndexValid() const;
UpdateNetwork* const network() const;
Repo* const repo() const;
bool retrieveAssetsJsonFile(const QString & assetName, QJsonDocument * json);
bool retrieveRepoJsonFile(const QString & filename, QJsonDocument * json);
bool setFilteredAssets(const UpdateParameters::AssetParams & ap);
void setFirmwareFlavour();
void setLanguage();
void setParamFolders();
void setReleaseId(QString name);
UpdateStatus* const status() const;
const QString updateDir() const;
static QStringList versionToStringList(QString version);
static const QString updateFlagsToString(const int flags);
static const QString updateFlagToString(const int flag);
private:
const ComponentIdentity m_id;
const QString m_name;
UpdateParameters* const m_params;
UpdateStatus* const m_status;
UpdateNetwork* const m_network;
Repo* const m_repo;
QString m_downloadDir;
QString m_decompressDir;
QString m_updateDir;
void appSettingsInit();
bool checkCreateDirectory(const QString & dirSetting, const UpdateFlags flag);
bool decompressArchive(const QString & archivePath, const QString & destPath);
bool releaseSettingsSave();
bool setRunFolders();
};