diff options
author | Petr Mrázek <peterix@gmail.com> | 2014-07-26 23:00:35 +0200 |
---|---|---|
committer | Petr Mrázek <peterix@gmail.com> | 2014-07-26 23:00:35 +0200 |
commit | 03b13b0b3f43e830ca924338b38e1947cd0cc739 (patch) | |
tree | 08941e693ab365f934beba04d69aacf481be40d1 /logic/minecraft/RawLibrary.h | |
parent | 9b82c87c92761515a11f00540a6bf74df6c76298 (diff) | |
download | MultiMC-03b13b0b3f43e830ca924338b38e1947cd0cc739.tar MultiMC-03b13b0b3f43e830ca924338b38e1947cd0cc739.tar.gz MultiMC-03b13b0b3f43e830ca924338b38e1947cd0cc739.tar.lz MultiMC-03b13b0b3f43e830ca924338b38e1947cd0cc739.tar.xz MultiMC-03b13b0b3f43e830ca924338b38e1947cd0cc739.zip |
Rearrange RawLibrary and OneSixLibrary heavily.
Fix #396
Diffstat (limited to 'logic/minecraft/RawLibrary.h')
-rw-r--r-- | logic/minecraft/RawLibrary.h | 128 |
1 files changed, 117 insertions, 11 deletions
diff --git a/logic/minecraft/RawLibrary.h b/logic/minecraft/RawLibrary.h index 6e8f7f10..6263f99a 100644 --- a/logic/minecraft/RawLibrary.h +++ b/logic/minecraft/RawLibrary.h @@ -4,6 +4,7 @@ #include <QList> #include <QStringList> #include <QMap> +#include <QDir> #include <memory> #include "logic/minecraft/OneSixRule.h" @@ -16,36 +17,141 @@ typedef std::shared_ptr<RawLibrary> RawLibraryPtr; class RawLibrary { + friend class OneSixLibrary; public: /* methods */ /// read and create a basic library static RawLibraryPtr fromJson(const QJsonObject &libObj, const QString &filename); + /// read and create a MultiMC '+' library. Those have some extra fields. static RawLibraryPtr fromJsonPlus(const QJsonObject &libObj, const QString &filename); - QJsonObject toJson(); + + /// Convert the library back to an JSON object + QJsonObject toJson() const; + + /// Returns the raw name field + const GradleSpecifier & rawName() const + { + return m_name; + } - QString fullname(); + void setRawName(const GradleSpecifier & spec) + { + m_name = spec; + } + + void setClassifier(const QString & spec) + { + m_name.setClassifier(spec); + } -public: /* data */ + /// returns the full group and artifact prefix + QString artifactPrefix() const + { + return m_name.artifactPrefix(); + } + + /// get the artifact ID + QString artifactId() const + { + return m_name.artifactId(); + } + + /// get the artifact version + QString version() const + { + return m_name.version(); + } + + /// Returns true if the library is native + bool isNative() const + { + return m_native_classifiers.size() != 0; + } + + /// Set the url base for downloads + void setBaseUrl(const QString &base_url) + { + m_base_url = base_url; + } + + /// List of files this library describes. Required because of platform-specificness of native libs + QStringList files() const; + + /// List Shortcut for checking if all the above files exist + bool filesExist(const QDir &base) const; + + void setAbsoluteUrl(const QString &absolute_url) + { + m_absolute_url = absolute_url; + } + + QString absoluteUrl() const + { + return m_absolute_url; + } + + void setHint(const QString &hint) + { + m_hint = hint; + } + + QString hint() const + { + return m_hint; + } + + /// Set the load rules + void setRules(QList<std::shared_ptr<Rule>> rules) + { + m_rules = rules; + } + + /// Returns true if the library should be loaded (or extracted, in case of natives) + bool isActive() const; + + /// Get the URL to download the library from + QString downloadUrl() const; + + /// Get the relative path where the library should be saved + QString storagePath() const; + + +protected: /* data */ + /// the basic gradle dependency specifier. GradleSpecifier m_name; + /// where to store the lib locally + QString m_storage_path; + /// is this lib actually active on the current OS? + bool m_is_active = false; + + +public: /* data */ + // TODO: make all of these protected, clean up semantics of implicit vs. explicit values. + /// URL where the file can be downloaded QString m_base_url; + /// DEPRECATED: absolute URL. takes precedence the normal download URL, if defined + QString m_absolute_url; + /// type hint - modifies how the library is treated QString m_hint; - /// DEPRECATED: absolute URL. takes precedence over m_download_path, if defined - QString m_absolute_url; + /// true if the library had an extract/excludes section (even empty) bool applyExcludes = false; + + /// a list of files that shouldn't be extracted from the library QStringList extract_excludes; - /// Returns true if the library is native - bool isNative() const; /// native suffixes per OS QMap<OpSys, QString> m_native_classifiers; + /// true if the library had a rules section (even empty) bool applyRules = false; + + /// rules associated with the library QList<std::shared_ptr<Rule>> m_rules; - // used for '+' libraries + /// used for '+' libraries, determines how to add them enum InsertType { Apply, @@ -55,10 +161,10 @@ public: /* data */ } insertType = Append; QString insertData; - // soft or hard dependency? hard means 'needs equal', soft means 'needs equal or newer' + /// determines how can libraries be applied. conflicting dependencies cause errors. enum DependType { - Soft, - Hard + Soft, //! needs equal or newer version + Hard //! needs equal version (different versions mean version conflict) } dependType = Soft; }; |