From 03b13b0b3f43e830ca924338b38e1947cd0cc739 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Sat, 26 Jul 2014 23:00:35 +0200 Subject: Rearrange RawLibrary and OneSixLibrary heavily. Fix #396 --- logic/minecraft/RawLibrary.h | 128 +++++++++++++++++++++++++++++++++++++++---- 1 file changed, 117 insertions(+), 11 deletions(-) (limited to 'logic/minecraft/RawLibrary.h') 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 #include #include +#include #include #include "logic/minecraft/OneSixRule.h" @@ -16,36 +17,141 @@ typedef std::shared_ptr 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> 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 m_native_classifiers; + /// true if the library had a rules section (even empty) bool applyRules = false; + + /// rules associated with the library QList> 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; }; -- cgit v1.2.3