From a7a84d4dbb58565f108cb0886da6cb786e34d10d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Sat, 27 Jul 2013 11:41:45 +0200 Subject: Parsing the version files, part III --- libmultimc/src/fullversionfactory.cpp | 104 ++++++++++++++++++++-------------- 1 file changed, 61 insertions(+), 43 deletions(-) (limited to 'libmultimc/src/fullversionfactory.cpp') diff --git a/libmultimc/src/fullversionfactory.cpp b/libmultimc/src/fullversionfactory.cpp index 9b4ae266..bb55b4a9 100644 --- a/libmultimc/src/fullversionfactory.cpp +++ b/libmultimc/src/fullversionfactory.cpp @@ -2,6 +2,61 @@ #include "fullversion.h" #include +class LibraryFinalizer +{ +public: + LibraryFinalizer(QSharedPointer library) + { + m_library = library; + } + + QSharedPointer m_library; +}; + +// Library rules (if any) +QList > FullVersionFactory::parse4rules(QJsonObject & baseObj) +{ + QList > rules; + auto rulesVal = baseObj.value("rules"); + if(rulesVal.isArray()) + { + QJsonArray ruleList = rulesVal.toArray(); + for(auto ruleVal : ruleList) + { + QSharedPointer rule; + if(!ruleVal.isObject()) + continue; + auto ruleObj = ruleVal.toObject(); + auto actionVal = ruleObj.value("action"); + if(!actionVal.isString()) + continue; + auto action = RuleAction_fromString(actionVal.toString()); + if(action == Defer) + continue; + + auto osVal = ruleObj.value("os"); + if(!osVal.isObject()) + { + // add a new implicit action rule + rules.append(ImplicitRule::create(action)); + } + else + { + auto osObj = osVal.toObject(); + auto osNameVal = osObj.value("name"); + if(!osNameVal.isString()) + continue; + OpSys requiredOs = OpSys_fromString(osNameVal.toString()); + QString versionRegex = osObj.value("version").toString(); + // add a new OS rule + rules.append(OsRule::create(action, requiredOs, versionRegex)); + } + } + } + return rules; +} + + QSharedPointer FullVersionFactory::parse4(QJsonObject root, QSharedPointer fullVersion) { fullVersion->id = root.value("id").toString(); @@ -48,7 +103,6 @@ QSharedPointer FullVersionFactory::parse4(QJsonObject root, QShared QJsonArray libList = root.value("libraries").toArray(); for (auto libVal : libList) { - QSharedPointer library(new Library()); if (!libVal.isObject()) { continue; @@ -60,7 +114,7 @@ QSharedPointer FullVersionFactory::parse4(QJsonObject root, QShared auto nameVal = libObj.value("name"); if(!nameVal.isString()) continue; - library->name = nameVal.toString(); + QSharedPointer library(new Library(nameVal.toString())); // Extract excludes (if any) auto extractVal = libObj.value("extract"); @@ -84,6 +138,7 @@ QSharedPointer FullVersionFactory::parse4(QJsonObject root, QShared auto nativesVal = libObj.value("natives"); if(nativesVal.isObject()) { + library->setIsNative(); auto nativesObj = nativesVal.toObject(); auto iter = nativesObj.begin(); while(iter != nativesObj.end()) @@ -93,50 +148,13 @@ QSharedPointer FullVersionFactory::parse4(QJsonObject root, QShared continue; if(!iter.value().isString()) continue; - library->natives[osType] = iter.value().toString(); + library->addNative(osType, iter.value().toString()); iter++; } } - - // Library rules (if any) - auto rulesVal = libObj.value("rules"); - if(rulesVal.isArray()) - { - QList > rules; - - QJsonArray ruleList = rulesVal.toArray(); - for(auto ruleVal : ruleList) - { - QSharedPointer rule; - if(!ruleVal.isObject()) - continue; - auto ruleObj = ruleVal.toObject(); - auto actionVal = ruleObj.value("action"); - if(!actionVal.isString()) - continue; - auto action = RuleAction_fromString(actionVal.toString()); - if(action == Defer) - continue; - - auto osVal = ruleObj.value("os"); - if(!osVal.isObject()) - { - rule.reset(new ImplicitRule(action)); - } - else - { - auto osObj = osVal.toObject(); - auto osNameVal = osObj.value("name"); - if(!osNameVal.isString()) - continue; - OpSys requiredOs = OpSys_fromString(osNameVal.toString()); - QString versionRegex = osObj.value("version").toString(); - rule.reset(new OsRule(action, requiredOs, versionRegex)); - } - rules.append(rule); - } - library->rules = rules; - } + library->setRules(parse4rules(libObj)); + library->finalize(); + fullVersion->libraries.append(library); } return fullVersion; } -- cgit v1.2.3