Merge pull request #5699 from JosJuice/wx-custom-titles
DolphinWX: Sync custom title changes on game list rescan
This commit is contained in:
commit
540ee18966
|
@ -421,11 +421,17 @@ void GameListCtrl::RefreshList()
|
|||
std::unique_lock<std::mutex> lk(m_title_database_mutex);
|
||||
for (const auto& drive : cdio_get_devices())
|
||||
{
|
||||
auto file = std::make_shared<GameListItem>(drive, m_title_database);
|
||||
auto file = std::make_shared<GameListItem>(drive);
|
||||
if (file->IsValid())
|
||||
{
|
||||
if (file->EmuStateChanged())
|
||||
file->EmuStateCommit();
|
||||
if (file->CustomNameChanged(m_title_database))
|
||||
file->CustomNameCommit();
|
||||
m_shown_files.push_back(file);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Freeze();
|
||||
ClearAll();
|
||||
|
@ -780,7 +786,7 @@ void GameListCtrl::RescanList()
|
|||
}
|
||||
for (const auto& path : new_paths)
|
||||
{
|
||||
auto file = std::make_shared<GameListItem>(path, m_title_database);
|
||||
auto file = std::make_shared<GameListItem>(path);
|
||||
if (file->IsValid())
|
||||
{
|
||||
cache_changed = true;
|
||||
|
@ -804,7 +810,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<GameListItem>(*file);
|
||||
|
@ -812,6 +819,8 @@ void GameListCtrl::RescanList()
|
|||
copy->EmuStateCommit();
|
||||
if (banner_changed)
|
||||
copy->BannerCommit();
|
||||
if (custom_title_changed)
|
||||
copy->CustomNameCommit();
|
||||
file = std::move(copy);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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 = std::move(m_pending.custom_name);
|
||||
}
|
||||
|
||||
bool GameListItem::EmuStateChanged()
|
||||
{
|
||||
IniFile ini = SConfig::LoadGameIni(m_game_id, m_revision);
|
||||
|
@ -157,7 +163,7 @@ bool GameListItem::EmuStateChanged()
|
|||
|
||||
void GameListItem::EmuStateCommit()
|
||||
{
|
||||
m_emu_state = m_pending.emu_state;
|
||||
m_emu_state = std::move(m_pending.emu_state);
|
||||
}
|
||||
|
||||
void GameListItem::EmuState::DoState(PointerWrap& p)
|
||||
|
|
|
@ -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{};
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue