summaryrefslogtreecommitdiffstats
path: root/src/CRSMPackCompatibility.cpp
diff options
context:
space:
mode:
authorMarkus Mittendrein <git@maxmitti.tk>2015-10-27 14:13:47 +0100
committerMarkus Mittendrein <git@maxmitti.tk>2015-10-29 14:17:49 +0100
commitfdfcc2d575e845a32ffe2dfc0b330a686e92dcc0 (patch)
treee8fc3ca36215b3b521062f1453e57a1d8ca4b781 /src/CRSMPackCompatibility.cpp
parent0d3488944e9ba29a8e7f938a31bc172f8fc01c4a (diff)
downloadmanager-fdfcc2d575e845a32ffe2dfc0b330a686e92dcc0.tar.gz
manager-fdfcc2d575e845a32ffe2dfc0b330a686e92dcc0.zip
Add support for individual pack versions per scenario
Diffstat (limited to 'src/CRSMPackCompatibility.cpp')
-rw-r--r--src/CRSMPackCompatibility.cpp169
1 files changed, 167 insertions, 2 deletions
diff --git a/src/CRSMPackCompatibility.cpp b/src/CRSMPackCompatibility.cpp
index 481cf44..cea57f7 100644
--- a/src/CRSMPackCompatibility.cpp
+++ b/src/CRSMPackCompatibility.cpp
@@ -1,7 +1,172 @@
-#include "PackCompatibility.hpp"
+#include "CRSMPackCompatibility.hpp"
-PackCompatibility::PackCompatibility()
+#include <QFile>
+
+void CRSMPackCompatibility::clear()
{
+ auto configVals = configValues;
+ *this = CRSMPackCompatibility();
+ configValues = configVals;
+}
+
+QString CRSMPackCompatibility::linkScenarioPacks(const QString &scenario)
+{
+ QStringList parts;
+ parts.append(scenario);
+ QString ret;
+ int position = scenario.length();
+ while((position = scenario.lastIndexOf('/', position - 1)) != -1)
+ {
+ parts.append(scenario.left(position));
+ }
+
+ QMap<QString, QString> packs = PackDefaultVersion;
+ foreach(const QString& filePathPart, parts)
+ {
+ foreach(const QString& packVersion, ScenarioPacks.value(filePathPart))
+ {
+ packs[PackVersions[packVersion]] = packVersion;
+ }
+ }
+ foreach(const QString& packName, packs.keys())
+ {
+ QFile packFile(clonkPath + packName);
+ if(packFile.exists())
+ {
+ packFile.remove();
+ }
+ if(!QFile::link(clonkPath + packs[packName], clonkPath + packName))
+ {
+ ret.append("Warning: Could not link pack \"" + packName + "\" to \"" + packs[packName] + "\".\n");
+ }
+ }
+
+ return ret;
}
+QString CRSMPackCompatibility::read(const QString &fileName, const QString& clonkPath, bool writeDefault)
+{
+ this->clonkPath = clonkPath;
+ QString ret = ConfigBase::read(fileName, writeDefault);
+
+ foreach(const QString& packVersion, PackVersions.keys())
+ {
+ ret.append(checkPackVersion(packVersion, PackVersions[packVersion]));
+ }
+
+ foreach(const QString& scenario, ScenarioPacks.keys())
+ {
+ foreach(const QString& scenarioPack, ScenarioPacks[scenario])
+ {
+ ret.append(checkScenarioPack(scenarioPack, scenario));
+ }
+ }
+
+ return ret;
+}
+
+QString CRSMPackCompatibility::addPackVersion(const QString &packVersion, const QString &pack)
+{
+ PackVersions[packVersion] = pack;
+ if(!PackDefaultVersion.contains(pack))
+ {
+ PackDefaultVersion[pack] = packVersion;
+ }
+ return checkPackVersion(packVersion, pack);
+}
+
+QString CRSMPackCompatibility::deletePackVersion(const QString &packVersion)
+{
+ if(PackVersions.contains(packVersion))
+ {
+ const QString& pack = PackVersions.value(packVersion);
+ PackVersions.remove(packVersion);
+ if(PackVersions.values().count(pack) == 0)
+ {
+ PackDefaultVersion.remove(pack);
+ }
+ else if(PackDefaultVersion.value(pack) == packVersion)
+ {
+ PackDefaultVersion[pack] = PackVersions.key(pack);
+ return "Warning: Changing default version of \"" + pack + "\" to \"" + PackDefaultVersion[pack] + "\".\n";
+ }
+ return "";
+ }
+ else
+ {
+ return "Error: Can not remove unknown PackVersion.";
+ }
+}
+
+QString CRSMPackCompatibility::setDefaultPackVersion(const QString &packVersion, const QString &pack)
+{
+ PackDefaultVersion[pack] = packVersion;
+ QString ret = addPackVersion(packVersion, pack);
+ return ret;
+}
+
+QString CRSMPackCompatibility::addScenarioPackVersion(const QString &packVersion, const QString &scenario)
+{
+ QString ret = checkScenarioPack(packVersion, scenario);
+ if(ret.isEmpty())
+ {
+ QString pack = PackVersions.value(packVersion);
+ foreach(const QString& scenarioPack, ScenarioPacks[scenario])
+ {
+ if(pack == PackVersions.value(scenarioPack))
+ {
+ ScenarioPacks[scenario].removeAll(scenarioPack);
+ ret = "Overwriting old PackVersion \"" + scenarioPack + "\" with \"" + packVersion + "\".\n";
+ }
+ }
+ }
+
+ ScenarioPacks[scenario].append(packVersion);
+ return ret;
+}
+
+QString CRSMPackCompatibility::deleteScenarioPackVersion(const QString &packVersion, const QString &scenario)
+{
+ if(!ScenarioPacks.contains(scenario))
+ {
+ return "Warning: The scenario \"" + scenario + "\" has no ScenarioPacks defined.\n";
+ }
+ else if(!ScenarioPacks[scenario].contains(packVersion))
+ {
+ return "Warning: The scenario \"" + scenario + "\" has no ScenarioPack \"" + packVersion + "\" defined.\n";
+ }
+ else
+ {
+ ScenarioPacks[scenario].removeAll(packVersion);
+ if(ScenarioPacks[scenario].length() == 0)
+ {
+ ScenarioPacks.remove(scenario);
+ }
+ return "";
+ }
+}
+
+QString CRSMPackCompatibility::checkPackVersion(const QString &packVersion, const QString &pack)
+{
+ if(!QFile(clonkPath + packVersion).exists())
+ {
+ return "Warning: PackVersion \"" + packVersion + "\" of pack \"" + pack + "\" does not exist.\n";
+ }
+ else
+ {
+ return "";
+ }
+}
+
+QString CRSMPackCompatibility::checkScenarioPack(const QString &packVersion, const QString &scenario)
+{
+ if(!PackVersions.contains(packVersion))
+ {
+ return "Warning: Unknown ScenarioPack \"" + packVersion + "\" of scenario \"" + scenario + "\" will not be linked.\n";
+ }
+ else
+ {
+ return "";
+ }
+}