diff options
Diffstat (limited to 'logic/minecraft/RawLibrary.cpp')
-rw-r--r-- | logic/minecraft/RawLibrary.cpp | 54 |
1 files changed, 44 insertions, 10 deletions
diff --git a/logic/minecraft/RawLibrary.cpp b/logic/minecraft/RawLibrary.cpp index 3c771895..fa8270cd 100644 --- a/logic/minecraft/RawLibrary.cpp +++ b/logic/minecraft/RawLibrary.cpp @@ -2,6 +2,7 @@ using namespace MMCJson; #include "RawLibrary.h" +#include <pathutils.h> RawLibraryPtr RawLibrary::fromJson(const QJsonObject &libObj, const QString &filename) { @@ -29,7 +30,9 @@ RawLibraryPtr RawLibrary::fromJson(const QJsonObject &libObj, const QString &fil return true; }; - readString("url", out->m_base_url); + QString urlStr; + readString("url", urlStr); + out->m_base_url = urlStr; readString("MMC-hint", out->m_hint); readString("MMC-absulute_url", out->m_absolute_url); readString("MMC-absoluteUrl", out->m_absolute_url); @@ -109,7 +112,7 @@ RawLibraryPtr RawLibrary::fromJsonPlus(const QJsonObject &libObj, const QString throw JSONValidationError("Empty compound insert rule in " + filename); } QString insertString = insertObj.keys().first(); - // really, only replace makes sense in combination with + // really, only replace makes sense in combination with if(insertString != "replace") { throw JSONValidationError("Compound insert rule is not 'replace' in " + filename); @@ -154,7 +157,7 @@ QJsonObject RawLibrary::toJson() const m_base_url != "https://" + URLConstants::AWS_DOWNLOAD_LIBRARIES && m_base_url != "https://" + URLConstants::LIBRARY_BASE && !m_base_url.isEmpty()) { - libRoot.insert("url", m_base_url); + libRoot.insert("url", m_base_url.toString()); } if (isNative()) { @@ -194,7 +197,7 @@ QJsonObject RawLibrary::toJson() const QStringList RawLibrary::files() const { QStringList retval; - QString storage = storagePath(); + QString storage = storageSuffix(); if (storage.contains("${arch}")) { QString cooked_storage = storage; @@ -221,17 +224,19 @@ bool RawLibrary::filesExist(const QDir &base) const } return true; } -QString RawLibrary::downloadUrl() const +QUrl RawLibrary::url() const { - if (m_absolute_url.size()) + if (!m_absolute_url.isEmpty()) + { return m_absolute_url; + } if (m_base_url.isEmpty()) { - return QString("https://" + URLConstants::LIBRARY_BASE) + storagePath(); + return QString("https://" + URLConstants::LIBRARY_BASE) + storageSuffix(); } - return m_base_url + storagePath(); + return m_base_url.resolved(storageSuffix()); } bool RawLibrary::isActive() const @@ -259,7 +264,26 @@ bool RawLibrary::isActive() const return result; } -QString RawLibrary::storagePath() const +void RawLibrary::setStoragePrefix(QString prefix) +{ + m_storagePrefix = prefix; +} + +QString RawLibrary::defaultStoragePrefix() +{ + return "libraries/"; +} + +QString RawLibrary::storagePrefix() const +{ + if(m_storagePrefix.isEmpty()) + { + return defaultStoragePrefix(); + } + return m_storagePrefix; +} + +QString RawLibrary::storageSuffix() const { // non-native? use only the gradle specifier if (!isNative()) @@ -269,7 +293,7 @@ QString RawLibrary::storagePath() const // otherwise native, override classifiers. Mojang HACK! GradleSpecifier nativeSpec = m_name; - if(m_native_classifiers.contains(currentSystem)) + if (m_native_classifiers.contains(currentSystem)) { nativeSpec.setClassifier(m_native_classifiers[currentSystem]); } @@ -279,3 +303,13 @@ QString RawLibrary::storagePath() const } return nativeSpec.toPath(); } + +QString RawLibrary::storagePath() const +{ + return PathCombine(storagePrefix(), storageSuffix()); +} + +bool RawLibrary::storagePathIsDefault() const +{ + return m_storagePrefix.isEmpty(); +} |