diff --git a/logic/BaseInstance.h b/logic/BaseInstance.h index 353ea58a..a861e9b2 100644 --- a/logic/BaseInstance.h +++ b/logic/BaseInstance.h @@ -57,7 +57,7 @@ public: /// The instance's ID. The ID SHALL be determined by MMC internally. The ID IS guaranteed to /// be unique. - QString id() const; + virtual QString id() const; /// get the type of this instance QString instanceType() const; diff --git a/logic/LegacyFTBInstance.cpp b/logic/LegacyFTBInstance.cpp index 84d5a900..6c6bd10b 100644 --- a/logic/LegacyFTBInstance.cpp +++ b/logic/LegacyFTBInstance.cpp @@ -14,3 +14,8 @@ bool LegacyFTBInstance::menuActionEnabled(QString action_name) const { return false; } + +QString LegacyFTBInstance::id() const +{ + return "FTB/" + BaseInstance::id(); +} diff --git a/logic/LegacyFTBInstance.h b/logic/LegacyFTBInstance.h index 2ae72797..70f60535 100644 --- a/logic/LegacyFTBInstance.h +++ b/logic/LegacyFTBInstance.h @@ -10,4 +10,5 @@ public: QObject *parent = 0); virtual QString getStatusbarDescription(); virtual bool menuActionEnabled(QString action_name) const; + virtual QString id() const; }; diff --git a/logic/OneSixFTBInstance.cpp b/logic/OneSixFTBInstance.cpp index 4bb5cf42..e50a5b53 100644 --- a/logic/OneSixFTBInstance.cpp +++ b/logic/OneSixFTBInstance.cpp @@ -92,6 +92,11 @@ OneSixFTBInstance::OneSixFTBInstance(const QString &rootDir, SettingsObject *set } } +QString OneSixFTBInstance::id() const +{ + return "FTB/" + BaseInstance::id(); +} + QString OneSixFTBInstance::getStatusbarDescription() { return "OneSix FTB: " + intendedVersionId(); diff --git a/logic/OneSixFTBInstance.h b/logic/OneSixFTBInstance.h index 7600090c..dc028819 100644 --- a/logic/OneSixFTBInstance.h +++ b/logic/OneSixFTBInstance.h @@ -15,6 +15,8 @@ public: virtual std::shared_ptr doUpdate(bool only_prepare) override; + virtual QString id() const; + private: std::shared_ptr m_forge; }; diff --git a/logic/lists/InstanceList.cpp b/logic/lists/InstanceList.cpp index bfd183d9..0d4eab95 100644 --- a/logic/lists/InstanceList.cpp +++ b/logic/lists/InstanceList.cpp @@ -308,45 +308,52 @@ void InstanceList::loadForgeInstances(QMap groupMap) return; } dir.cd("ModPacks"); - auto fpath = dir.absoluteFilePath("modpacks.xml"); - QFile f(fpath); - QLOG_INFO() << "Discovering FTB instances -- " << fpath; - if (!f.open(QFile::ReadOnly)) - return; - - // read the FTB packs XML. - QXmlStreamReader reader(&f); - while (!reader.atEnd()) + auto allFiles = dir.entryList(QDir::Readable | QDir::Files, QDir::Name); + for(auto filename: allFiles) { - switch (reader.readNext()) + if(!filename.endsWith(".xml")) + continue; + auto fpath = dir.absoluteFilePath(filename); + QFile f(fpath); + QLOG_INFO() << "Discovering FTB instances -- " << fpath; + if (!f.open(QFile::ReadOnly)) + continue; + + // read the FTB packs XML. + QXmlStreamReader reader(&f); + while (!reader.atEnd()) { - case QXmlStreamReader::StartElement: - { - if (reader.name() == "modpack") + switch (reader.readNext()) { - QXmlStreamAttributes attrs = reader.attributes(); - FTBRecord record; - record.dir = attrs.value("dir").toString(); - QDir test(dataDir.absoluteFilePath(record.dir)); - if(!test.exists()) - continue; - record.name = attrs.value("name").toString(); - record.logo = attrs.value("logo").toString(); - record.mcVersion = attrs.value("mcVersion").toString(); - record.description = attrs.value("description").toString(); - records.append(record); + case QXmlStreamReader::StartElement: + { + if (reader.name() == "modpack") + { + QXmlStreamAttributes attrs = reader.attributes(); + FTBRecord record; + record.dir = attrs.value("dir").toString(); + QDir test(dataDir.absoluteFilePath(record.dir)); + if(!test.exists()) + continue; + record.name = attrs.value("name").toString(); + record.logo = attrs.value("logo").toString(); + record.mcVersion = attrs.value("mcVersion").toString(); + record.description = attrs.value("description").toString(); + records.append(record); + } + break; + } + case QXmlStreamReader::EndElement: + break; + case QXmlStreamReader::Characters: + break; + default: + break; } - break; - } - case QXmlStreamReader::EndElement: - break; - case QXmlStreamReader::Characters: - break; - default: - break; } + f.close(); } - f.close(); + if(!records.size()) { QLOG_INFO() << "No FTB instances to load.";