diff options
Diffstat (limited to 'api/logic/updater/GoUpdate.h')
-rw-r--r-- | api/logic/updater/GoUpdate.h | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/api/logic/updater/GoUpdate.h b/api/logic/updater/GoUpdate.h new file mode 100644 index 00000000..b8a534de --- /dev/null +++ b/api/logic/updater/GoUpdate.h @@ -0,0 +1,133 @@ +#pragma once +#include <QByteArray> +#include <net/NetJob.h> + +#include "multimc_logic_export.h" + +namespace GoUpdate +{ + +/** + * A temporary object exchanged between updated checker and the actual update task + */ +struct MULTIMC_LOGIC_EXPORT Status +{ + bool updateAvailable = false; + + int newVersionId = -1; + QString newRepoUrl; + + int currentVersionId = -1; + QString currentRepoUrl; + + // path to the root of the application + QString rootPath; +}; + +/** + * Struct that describes an entry in a VersionFileEntry's `Sources` list. + */ +struct MULTIMC_LOGIC_EXPORT FileSource +{ + FileSource(QString type, QString url, QString compression="") + { + this->type = type; + this->url = url; + this->compressionType = compression; + } + + bool operator==(const FileSource &f2) const + { + return type == f2.type && url == f2.url && compressionType == f2.compressionType; + } + + QString type; + QString url; + QString compressionType; +}; +typedef QList<FileSource> FileSourceList; + +/** + * Structure that describes an entry in a GoUpdate version's `Files` list. + */ +struct MULTIMC_LOGIC_EXPORT VersionFileEntry +{ + QString path; + int mode; + FileSourceList sources; + QString md5; + bool operator==(const VersionFileEntry &v2) const + { + return path == v2.path && mode == v2.mode && sources == v2.sources && md5 == v2.md5; + } +}; +typedef QList<VersionFileEntry> VersionFileList; + +/** + * Structure that describes an operation to perform when installing updates. + */ +struct MULTIMC_LOGIC_EXPORT Operation +{ + static Operation CopyOp(QString fsource, QString fdest, int fmode=0644) + { + return Operation{OP_REPLACE, fsource, fdest, fmode}; + } + static Operation DeleteOp(QString file) + { + return Operation{OP_DELETE, file, "", 0644}; + } + + // FIXME: for some types, some of the other fields are irrelevant! + bool operator==(const Operation &u2) const + { + return type == u2.type && file == u2.file && dest == u2.dest && mode == u2.mode; + } + + //! Specifies the type of operation that this is. + enum Type + { + OP_REPLACE, + OP_DELETE, + } type; + + //! The file to operate on. + QString file; + + //! The destination file. + QString dest; + + //! The mode to change the source file to. + int mode; +}; +typedef QList<Operation> OperationList; + +/** + * Loads the file list from the given version info JSON object into the given list. + */ +bool MULTIMC_LOGIC_EXPORT parseVersionInfo(const QByteArray &data, VersionFileList& list, QString &error); + +/*! + * Takes a list of file entries for the current version's files and the new version's files + * and populates the downloadList and operationList with information about how to download and install the update. + */ +bool MULTIMC_LOGIC_EXPORT processFileLists +( + const VersionFileList ¤tVersion, + const VersionFileList &newVersion, + const QString &rootPath, + const QString &tempPath, + NetJobPtr job, + OperationList &ops +); + +/*! + * This fixes destination paths for OSX - removes 'MultiMC.app' prefix + * The updater runs in MultiMC.app/Contents/MacOs by default + * The destination paths are such as this: MultiMC.app/blah/blah + * + * @return false if the path couldn't be fixed (is invalid) + */ +bool MULTIMC_LOGIC_EXPORT fixPathForOSX(QString &path); + +} +Q_DECLARE_METATYPE(GoUpdate::Status);
\ No newline at end of file |