summaryrefslogtreecommitdiff
path: root/src/instancemanager.cpp
diff options
context:
space:
mode:
authorisanae <14251494+isanae@users.noreply.github.com>2020-10-31 17:44:25 -0400
committerisanae <14251494+isanae@users.noreply.github.com>2020-11-03 11:41:54 -0500
commitb10436d60f7db3eedd838cbfad93cb41ddf1fd86 (patch)
tree08c0f7ee4b61cbf367a5a6a03a39c6500c22689e /src/instancemanager.cpp
parent356d17b2ea70d9bfdc36d8199e12eb21cd3d4669 (diff)
game icons in the instance list
Diffstat (limited to 'src/instancemanager.cpp')
-rw-r--r--src/instancemanager.cpp59
1 files changed, 59 insertions, 0 deletions
diff --git a/src/instancemanager.cpp b/src/instancemanager.cpp
index 111f948b..4ad099ed 100644
--- a/src/instancemanager.cpp
+++ b/src/instancemanager.cpp
@@ -637,6 +637,65 @@ MOBase::IPluginGame* InstanceManager::determineCurrentGame(
return nullptr;
}
+const MOBase::IPluginGame* InstanceManager::gamePluginForDirectory(
+ const QDir& instanceDir, const PluginContainer& plugins) const
+{
+ const QString ini =
+ QDir(instanceDir).filePath(QString::fromStdWString(AppConfig::iniFileName()));
+
+
+ Settings s(ini);
+
+ if (s.iniStatus() != QSettings::NoError)
+ {
+ log::error("failed to load settings from {}", ini);
+ return nullptr;
+ }
+
+ const auto instanceGameName = s.game().name();
+
+ if (instanceGameName && !instanceGameName->isEmpty())
+ {
+ for (const IPluginGame* game : plugins.plugins<IPluginGame>()) {
+ if (instanceGameName->compare(game->gameName(), Qt::CaseInsensitive) == 0) {
+ return game;
+ }
+ }
+
+ log::error(
+ "no plugin reports game name '{}' found in ini {}",
+ *instanceGameName, ini);
+ }
+ else
+ {
+ log::error("no game name found in ini {}", ini);
+ }
+
+
+ log::error("falling back on looksValid check");
+
+ const auto gameDir = s.game().directory();
+
+ if (gameDir && !gameDir->isEmpty())
+ {
+ for (const IPluginGame* game : plugins.plugins<IPluginGame>()) {
+ if (game->looksValid(*gameDir)) {
+ return game;
+ }
+ }
+
+ log::error(
+ "no plugins appear to support game directory '{}' from ini {}",
+ *gameDir, ini);
+ }
+ else
+ {
+ log::error("no game directory found in ini {}", ini);
+ }
+
+ return nullptr;
+}
+
QString InstanceManager::makeUniqueName(const QString& instanceName) const
{
const QString sanitized = sanitizeInstanceName(instanceName);