diff options
| author | isanae <14251494+isanae@users.noreply.github.com> | 2020-10-31 17:44:25 -0400 |
|---|---|---|
| committer | isanae <14251494+isanae@users.noreply.github.com> | 2020-11-03 11:41:54 -0500 |
| commit | b10436d60f7db3eedd838cbfad93cb41ddf1fd86 (patch) | |
| tree | 08c0f7ee4b61cbf367a5a6a03a39c6500c22689e /src/instancemanager.cpp | |
| parent | 356d17b2ea70d9bfdc36d8199e12eb21cd3d4669 (diff) | |
game icons in the instance list
Diffstat (limited to 'src/instancemanager.cpp')
| -rw-r--r-- | src/instancemanager.cpp | 59 |
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); |
