diff options
author | Petr Mrázek <peterix@gmail.com> | 2016-03-07 02:01:28 +0100 |
---|---|---|
committer | Petr Mrázek <peterix@gmail.com> | 2016-03-07 02:03:36 +0100 |
commit | d4eacb56b30baaef801f42545398a4f29755fadf (patch) | |
tree | 0a185b0841f12c5af431cdedeb8695691ac0bce9 /logic/minecraft/Library.cpp | |
parent | 3d8728f52f220845fc4079d34b97458a122ac031 (diff) | |
download | MultiMC-d4eacb56b30baaef801f42545398a4f29755fadf.tar MultiMC-d4eacb56b30baaef801f42545398a4f29755fadf.tar.gz MultiMC-d4eacb56b30baaef801f42545398a4f29755fadf.tar.lz MultiMC-d4eacb56b30baaef801f42545398a4f29755fadf.tar.xz MultiMC-d4eacb56b30baaef801f42545398a4f29755fadf.zip |
NOISSUE make new Mojang version format pass through MultiMC structures
Not yet used effectively, but it is read and written properly
Diffstat (limited to 'logic/minecraft/Library.cpp')
-rw-r--r-- | logic/minecraft/Library.cpp | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/logic/minecraft/Library.cpp b/logic/minecraft/Library.cpp new file mode 100644 index 00000000..9a1d2cc7 --- /dev/null +++ b/logic/minecraft/Library.cpp @@ -0,0 +1,130 @@ +#include "Library.h" +#include <FileSystem.h> + +QStringList Library::files() const +{ + QStringList retval; + QString storage = storageSuffix(); + if (storage.contains("${arch}")) + { + QString cooked_storage = storage; + cooked_storage.replace("${arch}", "32"); + retval.append(cooked_storage); + cooked_storage = storage; + cooked_storage.replace("${arch}", "64"); + retval.append(cooked_storage); + } + else + retval.append(storage); + return retval; +} + +bool Library::filesExist(const QDir &base) const +{ + auto libFiles = files(); + for(auto file: libFiles) + { + QFileInfo info(base, file); + qWarning() << info.absoluteFilePath() << "doesn't exist"; + if (!info.exists()) + return false; + } + return true; +} + +QString Library::url() const +{ + if (!m_absolute_url.isEmpty()) + { + return m_absolute_url; + } + + if (m_base_url.isEmpty()) + { + return QString("https://" + URLConstants::LIBRARY_BASE) + storageSuffix(); + } + + if(m_base_url.endsWith('/')) + { + return m_base_url + storageSuffix(); + } + else + { + return m_base_url + QChar('/') + storageSuffix(); + } +} + +bool Library::isActive() const +{ + bool result = true; + if (m_rules.empty()) + { + result = true; + } + else + { + RuleAction ruleResult = Disallow; + for (auto rule : m_rules) + { + RuleAction temp = rule->apply(this); + if (temp != Defer) + ruleResult = temp; + } + result = result && (ruleResult == Allow); + } + if (isNative()) + { + result = result && m_native_classifiers.contains(currentSystem); + } + return result; +} + +void Library::setStoragePrefix(QString prefix) +{ + m_storagePrefix = prefix; +} + +QString Library::defaultStoragePrefix() +{ + return "libraries/"; +} + +QString Library::storagePrefix() const +{ + if(m_storagePrefix.isEmpty()) + { + return defaultStoragePrefix(); + } + return m_storagePrefix; +} + +QString Library::storageSuffix() const +{ + // non-native? use only the gradle specifier + if (!isNative()) + { + return m_name.toPath(); + } + + // otherwise native, override classifiers. Mojang HACK! + GradleSpecifier nativeSpec = m_name; + if (m_native_classifiers.contains(currentSystem)) + { + nativeSpec.setClassifier(m_native_classifiers[currentSystem]); + } + else + { + nativeSpec.setClassifier("INVALID"); + } + return nativeSpec.toPath(); +} + +QString Library::storagePath() const +{ + return FS::PathCombine(storagePrefix(), storageSuffix()); +} + +bool Library::storagePathIsDefault() const +{ + return m_storagePrefix.isEmpty(); +} |