/* SPDX-FileCopyrightText: 2026 Project Tick * SPDX-FileContributor: Project Tick * SPDX-License-Identifier: GPL-3.0-or-later * * MeshMC - A Custom Launcher for Minecraft * Copyright (C) 2026 Project Tick * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * 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. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include #include namespace GoUpdate { /** * A temporary object exchanged between updated checker and the actual * update task */ struct 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 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 FileSourceList; /** * Structure that describes an entry in a GoUpdate version's `Files` list. */ struct 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 VersionFileList; /** * Structure that describes an operation to perform when installing updates. */ struct Operation { static Operation CopyOp(QString from, QString to, int fmode = 0644) { return Operation{OP_REPLACE, from, to, fmode}; } static Operation DeleteOp(QString file) { return Operation{OP_DELETE, QString(), file, 0644}; } // FIXME: for some types, some of the other fields are irrelevant! bool operator==(const Operation& u2) const { return type == u2.type && source == u2.source && destination == u2.destination && destinationMode == u2.destinationMode; } //! Specifies the type of operation that this is. enum Type { OP_REPLACE, OP_DELETE, } type; //! The source file, if any QString source; //! The destination file. QString destination; //! The mode to change the destination file to. int destinationMode; }; typedef QList OperationList; /** * Loads the file list from the given version info JSON object into the * given list. */ bool 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 processFileLists(const VersionFileList& currentVersion, const VersionFileList& newVersion, const QString& rootPath, const QString& tempPath, NetJob::Ptr job, OperationList& ops); } // namespace GoUpdate Q_DECLARE_METATYPE(GoUpdate::Status)