From 172ba1fc3226af4fbf1554af1d2765e128913576 Mon Sep 17 00:00:00 2001 From: Connor McLaughlin Date: Thu, 13 May 2021 03:22:28 +1000 Subject: [PATCH] CommonHostInterface: Fix controller masking for Start Disc --- src/frontend-common/common_host_interface.cpp | 23 ++++++++++++------- src/frontend-common/game_list.cpp | 20 ++++++++++++++++ src/frontend-common/game_list.h | 3 +++ 3 files changed, 38 insertions(+), 8 deletions(-) diff --git a/src/frontend-common/common_host_interface.cpp b/src/frontend-common/common_host_interface.cpp index 435cbd19e..3c22c0a5a 100644 --- a/src/frontend-common/common_host_interface.cpp +++ b/src/frontend-common/common_host_interface.cpp @@ -2926,16 +2926,14 @@ void CommonHostInterface::GetGameInfo(const char* path, CDImage* image, std::str { GameDatabase database; GameDatabaseEntry database_entry; - if (database.Load() && database.GetEntryForDisc(image, &database_entry)) + if (m_game_list->GetDatabaseEntryForDisc(image, &database_entry)) { *code = std::move(database_entry.serial); *title = std::move(database_entry.title); return; } - else - { - *code = System::GetGameCodeForImage(image, true); - } + + *code = System::GetGameCodeForImage(image, true); } *title = FileSystem::GetFileTitleFromPath(path); @@ -3054,11 +3052,20 @@ void CommonHostInterface::ApplyGameSettings(bool display_osd_messages) const GameListEntry* ge = m_game_list->GetEntryForPath(System::GetRunningPath().c_str()); if (ge) + { ApplyControllerCompatibilitySettings(ge->supported_controllers, display_osd_messages); + ge->settings.ApplySettings(display_osd_messages); + } + else + { + GameDatabaseEntry db_entry; + if (m_game_list->GetDatabaseEntryForCode(System::GetRunningCode(), &db_entry)) + ApplyControllerCompatibilitySettings(db_entry.supported_controllers_mask, display_osd_messages); - const GameSettings::Entry* gs = m_game_list->GetGameSettings(System::GetRunningPath(), System::GetRunningCode()); - if (gs) - gs->ApplySettings(display_osd_messages); + const GameSettings::Entry* gs = m_game_list->GetGameSettingsForCode(System::GetRunningCode()); + if (gs) + gs->ApplySettings(display_osd_messages); + } } void CommonHostInterface::ApplyRendererFromGameSettings(const std::string& boot_filename) diff --git a/src/frontend-common/game_list.cpp b/src/frontend-common/game_list.cpp index a97775b34..267405f62 100644 --- a/src/frontend-common/game_list.cpp +++ b/src/frontend-common/game_list.cpp @@ -580,6 +580,18 @@ const GameListCompatibilityEntry* GameList::GetCompatibilityEntryForCode(const s return (iter != m_compatibility_list.end()) ? &iter->second : nullptr; } +bool GameList::GetDatabaseEntryForCode(const std::string_view& code, GameDatabaseEntry* entry) +{ + LoadDatabase(); + return m_database.GetEntryForCode(code, entry); +} + +bool GameList::GetDatabaseEntryForDisc(CDImage* image, GameDatabaseEntry* entry) +{ + LoadDatabase(); + return m_database.GetEntryForDisc(image, entry); +} + void GameList::SetSearchDirectoriesFromSettings(SettingsInterface& si) { m_search_directories.clear(); @@ -1012,6 +1024,14 @@ const GameSettings::Entry* GameList::GetGameSettings(const std::string& filename return m_game_settings.GetEntry(game_code); } +const GameSettings::Entry* GameList::GetGameSettingsForCode(const std::string& game_code) +{ + if (!m_game_settings_load_tried) + LoadGameSettings(); + + return m_game_settings.GetEntry(game_code); +} + void GameList::UpdateGameSettings(const std::string& filename, const std::string& game_code, const std::string& game_title, const GameSettings::Entry& new_entry, bool save_to_list /* = true */) diff --git a/src/frontend-common/game_list.h b/src/frontend-common/game_list.h index 6a50bb576..dcc7ad5d3 100644 --- a/src/frontend-common/game_list.h +++ b/src/frontend-common/game_list.h @@ -102,6 +102,8 @@ public: const GameListEntry* GetEntryForPath(const char* path) const; const GameListCompatibilityEntry* GetCompatibilityEntryForCode(const std::string& code) const; + bool GetDatabaseEntryForCode(const std::string_view& code, GameDatabaseEntry* entry); + bool GetDatabaseEntryForDisc(CDImage* image, GameDatabaseEntry* entry); void SetCacheFilename(std::string filename) { m_cache_filename = std::move(filename); } void SetUserCompatibilityListFilename(std::string filename) @@ -119,6 +121,7 @@ public: static std::string ExportCompatibilityEntry(const GameListCompatibilityEntry* entry); const GameSettings::Entry* GetGameSettings(const std::string& filename, const std::string& game_code); + const GameSettings::Entry* GetGameSettingsForCode(const std::string& game_code); void UpdateGameSettings(const std::string& filename, const std::string& game_code, const std::string& game_title, const GameSettings::Entry& new_entry, bool save_to_list = true);