summaryrefslogtreecommitdiffstats
path: root/logic/minecraft/RawLibrary.h
diff options
context:
space:
mode:
authorPetr Mrázek <peterix@gmail.com>2014-07-26 23:00:35 +0200
committerPetr Mrázek <peterix@gmail.com>2014-07-26 23:00:35 +0200
commit03b13b0b3f43e830ca924338b38e1947cd0cc739 (patch)
tree08941e693ab365f934beba04d69aacf481be40d1 /logic/minecraft/RawLibrary.h
parent9b82c87c92761515a11f00540a6bf74df6c76298 (diff)
downloadMultiMC-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.h128
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;
};