summaryrefslogtreecommitdiffstats
path: root/libraries/logic/updater/GoUpdate.h
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/logic/updater/GoUpdate.h')
-rw-r--r--libraries/logic/updater/GoUpdate.h133
1 files changed, 133 insertions, 0 deletions
diff --git a/libraries/logic/updater/GoUpdate.h b/libraries/logic/updater/GoUpdate.h
new file mode 100644
index 00000000..b8a534de
--- /dev/null
+++ b/libraries/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 &currentVersion,
+ 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