diff options
author | Petr Mrázek <peterix@gmail.com> | 2013-12-02 00:55:24 +0100 |
---|---|---|
committer | Petr Mrázek <peterix@gmail.com> | 2013-12-02 00:55:24 +0100 |
commit | 6aa9bd0f77dcb5128167fae62e32aa5252fe85c6 (patch) | |
tree | 632994a61888929af9289927d338bd19a2b3f32c /mmc_updater/src/UpdateScript.h | |
parent | 613699b3626aea750093ab7eaaeccaa28c0e87c6 (diff) | |
download | MultiMC-6aa9bd0f77dcb5128167fae62e32aa5252fe85c6.tar MultiMC-6aa9bd0f77dcb5128167fae62e32aa5252fe85c6.tar.gz MultiMC-6aa9bd0f77dcb5128167fae62e32aa5252fe85c6.tar.lz MultiMC-6aa9bd0f77dcb5128167fae62e32aa5252fe85c6.tar.xz MultiMC-6aa9bd0f77dcb5128167fae62e32aa5252fe85c6.zip |
Renew the updater branch
Now with some actual consensus on what the updater will do!
Diffstat (limited to 'mmc_updater/src/UpdateScript.h')
-rw-r--r-- | mmc_updater/src/UpdateScript.h | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/mmc_updater/src/UpdateScript.h b/mmc_updater/src/UpdateScript.h new file mode 100644 index 00000000..fec463f3 --- /dev/null +++ b/mmc_updater/src/UpdateScript.h @@ -0,0 +1,86 @@ +#pragma once + +#include <string> +#include <vector> + +class TiXmlElement; + +/** Represents a package containing one or more + * files for an update. + */ +class UpdateScriptPackage +{ + public: + UpdateScriptPackage() + : size(0) + {} + + std::string name; + std::string sha1; + std::string source; + int size; + + bool operator==(const UpdateScriptPackage& other) const + { + return name == other.name && + sha1 == other.sha1 && + source == other.source && + size == other.size; + } +}; + +/** Represents a file to be installed as part of an update. */ +class UpdateScriptFile +{ + public: + UpdateScriptFile() + : permissions(0) + , isMainBinary(false) + {} + + std::string path; + std::string linkTarget; + + /** The permissions for this file, specified + * using the standard Unix mode_t values. + */ + int permissions; + + bool isMainBinary; + + bool operator==(const UpdateScriptFile& other) const + { + return path == other.path && + permissions == other.permissions && + linkTarget == other.linkTarget && + isMainBinary == other.isMainBinary; + } +}; + +/** Stores information about the packages and files included + * in an update, parsed from an XML file. + */ +class UpdateScript +{ + public: + UpdateScript(); + + /** Initialize this UpdateScript with the script stored + * in the XML file at @p path. + */ + void parse(const std::string& path); + + bool isValid() const; + const std::string path() const; + const std::vector<UpdateScriptFile>& filesToInstall() const; + const std::vector<std::string>& filesToUninstall() const; + + private: + void parseUpdate(const TiXmlElement* element); + UpdateScriptFile parseFile(const TiXmlElement* element); + + std::string m_path; + std::vector<UpdateScriptFile> m_filesToInstall; + std::vector<std::string> m_filesToUninstall; +}; + |