From d5bf6f1bbc89d9e7fad9a09c4c159906f2521e90 Mon Sep 17 00:00:00 2001 From: JosJuice Date: Mon, 26 Jun 2017 22:19:51 +0200 Subject: [PATCH] DolphinWX: Sync custom title changes on game list rescan --- Source/Core/DolphinWX/GameListCtrl.cpp | 9 ++++++--- Source/Core/DolphinWX/ISOFile.cpp | 24 +++++++++++++++--------- Source/Core/DolphinWX/ISOFile.h | 5 ++++- 3 files changed, 25 insertions(+), 13 deletions(-) diff --git a/Source/Core/DolphinWX/GameListCtrl.cpp b/Source/Core/DolphinWX/GameListCtrl.cpp index 5b68857c01..9a542de2fe 100644 --- a/Source/Core/DolphinWX/GameListCtrl.cpp +++ b/Source/Core/DolphinWX/GameListCtrl.cpp @@ -421,7 +421,7 @@ void GameListCtrl::RefreshList() std::unique_lock lk(m_title_database_mutex); for (const auto& drive : cdio_get_devices()) { - auto file = std::make_shared(drive, m_title_database); + auto file = std::make_shared(drive); if (file->IsValid()) m_shown_files.push_back(file); } @@ -780,7 +780,7 @@ void GameListCtrl::RescanList() } for (const auto& path : new_paths) { - auto file = std::make_shared(path, m_title_database); + auto file = std::make_shared(path); if (file->IsValid()) { cache_changed = true; @@ -804,7 +804,8 @@ void GameListCtrl::RescanList() { bool emu_state_changed = file->EmuStateChanged(); bool banner_changed = file->BannerChanged(); - if (emu_state_changed || banner_changed) + bool custom_title_changed = file->CustomNameChanged(m_title_database); + if (emu_state_changed || banner_changed || custom_title_changed) { cache_changed = refresh_needed = true; auto copy = std::make_shared(*file); @@ -812,6 +813,8 @@ void GameListCtrl::RescanList() copy->EmuStateCommit(); if (banner_changed) copy->BannerCommit(); + if (custom_title_changed) + copy->CustomNameCommit(); file = std::move(copy); } } diff --git a/Source/Core/DolphinWX/ISOFile.cpp b/Source/Core/DolphinWX/ISOFile.cpp index 5f01889a29..48359e1485 100644 --- a/Source/Core/DolphinWX/ISOFile.cpp +++ b/Source/Core/DolphinWX/ISOFile.cpp @@ -61,7 +61,7 @@ static std::string GetLanguageString(DiscIO::Language language, return ""; } -GameListItem::GameListItem(const std::string& filename, const Core::TitleDatabase& title_database) +GameListItem::GameListItem(const std::string& filename) : m_file_name(filename), m_region(DiscIO::Region::UNKNOWN_REGION), m_country(DiscIO::Country::COUNTRY_UNKNOWN) { @@ -100,14 +100,6 @@ GameListItem::GameListItem(const std::string& filename, const Core::TitleDatabas if (m_company.empty() && m_game_id.size() >= 6) m_company = DiscIO::GetCompanyFromID(m_game_id.substr(4, 2)); - if (IsValid()) - { - const auto type = m_platform == DiscIO::Platform::WII_WAD ? - Core::TitleDatabase::TitleType::Channel : - Core::TitleDatabase::TitleType::Other; - m_custom_name = title_database.GetTitleName(m_game_id, type); - } - if (!IsValid() && IsElfOrDol()) { m_valid = true; @@ -147,6 +139,20 @@ bool GameListItem::IsValid() const return true; } +bool GameListItem::CustomNameChanged(const Core::TitleDatabase& title_database) +{ + const auto type = m_platform == DiscIO::Platform::WII_WAD ? + Core::TitleDatabase::TitleType::Channel : + Core::TitleDatabase::TitleType::Other; + m_pending.custom_name = title_database.GetTitleName(m_game_id, type); + return m_custom_name != m_pending.custom_name; +} + +void GameListItem::CustomNameCommit() +{ + m_custom_name = m_pending.custom_name; +} + bool GameListItem::EmuStateChanged() { IniFile ini = SConfig::LoadGameIni(m_game_id, m_revision); diff --git a/Source/Core/DolphinWX/ISOFile.h b/Source/Core/DolphinWX/ISOFile.h index a7b66c5e8e..f3a89562b0 100644 --- a/Source/Core/DolphinWX/ISOFile.h +++ b/Source/Core/DolphinWX/ISOFile.h @@ -33,7 +33,7 @@ class GameListItem { public: GameListItem() = default; - GameListItem(const std::string& file_name, const Core::TitleDatabase& title_database); + explicit GameListItem(const std::string& file_name); ~GameListItem() = default; bool IsValid() const; @@ -67,6 +67,8 @@ public: void BannerCommit(); bool EmuStateChanged(); void EmuStateCommit(); + bool CustomNameChanged(const Core::TitleDatabase& title_database); + void CustomNameCommit(); private: struct EmuState @@ -132,5 +134,6 @@ private: { EmuState emu_state; Banner banner; + std::string custom_name; } m_pending{}; };