Qt: Use SERIAL_CRC.ini naming for per-game settings

This commit is contained in:
Connor McLaughlin 2022-05-24 00:35:21 +10:00 committed by refractionpcsx2
parent aae8d5d639
commit 74738022da
5 changed files with 22 additions and 11 deletions

View File

@ -897,7 +897,7 @@ void MainWindow::onGameListEntryContextMenuRequested(const QPoint& point)
QAction* action = menu.addAction(tr("Properties...")); QAction* action = menu.addAction(tr("Properties..."));
action->setEnabled(!entry->serial.empty()); action->setEnabled(!entry->serial.empty());
if (action->isEnabled()) if (action->isEnabled())
connect(action, &QAction::triggered, [entry]() { SettingsDialog::openGamePropertiesDialog(entry, entry->crc); }); connect(action, &QAction::triggered, [entry]() { SettingsDialog::openGamePropertiesDialog(entry, entry->serial, entry->crc); });
action = menu.addAction(tr("Open Containing Directory...")); action = menu.addAction(tr("Open Containing Directory..."));
connect(action, &QAction::triggered, [this, entry]() { connect(action, &QAction::triggered, [this, entry]() {
@ -1074,14 +1074,14 @@ void MainWindow::onViewGamePropertiesActionTriggered()
const GameList::Entry* entry = GameList::GetEntryForPath(m_current_disc_path.toUtf8().constData()); const GameList::Entry* entry = GameList::GetEntryForPath(m_current_disc_path.toUtf8().constData());
if (entry) if (entry)
{ {
SettingsDialog::openGamePropertiesDialog(entry, entry->crc); SettingsDialog::openGamePropertiesDialog(entry, entry->serial, entry->crc);
return; return;
} }
} }
// open properties for the current running file (isn't in the game list) // open properties for the current running file (isn't in the game list)
if (m_current_game_crc != 0) if (m_current_game_crc != 0)
SettingsDialog::openGamePropertiesDialog(nullptr, m_current_game_crc); SettingsDialog::openGamePropertiesDialog(nullptr, m_current_game_serial.toStdString(), m_current_game_crc);
} }
void MainWindow::onGitHubRepositoryActionTriggered() void MainWindow::onGitHubRepositoryActionTriggered()

View File

@ -414,7 +414,7 @@ void SettingsDialog::setStringSettingValue(const char* section, const char* key,
g_emu_thread->applySettings(); g_emu_thread->applySettings();
} }
void SettingsDialog::openGamePropertiesDialog(const GameList::Entry* game, u32 crc) void SettingsDialog::openGamePropertiesDialog(const GameList::Entry* game, const std::string_view& serial, u32 crc)
{ {
// check for an existing dialog with this crc // check for an existing dialog with this crc
for (SettingsDialog* dialog : s_open_game_properties_dialogs) for (SettingsDialog* dialog : s_open_game_properties_dialogs)
@ -427,8 +427,8 @@ void SettingsDialog::openGamePropertiesDialog(const GameList::Entry* game, u32 c
} }
} }
std::unique_ptr<INISettingsInterface> sif = std::string filename(VMManager::GetGameSettingsPath(serial, crc));
std::make_unique<INISettingsInterface>(Path::Combine(EmuFolders::GameSettings, StringUtil::StdStringFromFormat("%08X.ini", crc))); std::unique_ptr<INISettingsInterface> sif = std::make_unique<INISettingsInterface>(std::move(filename));
if (FileSystem::FileExists(sif->GetFileName().c_str())) if (FileSystem::FileExists(sif->GetFileName().c_str()))
sif->Load(); sif->Load();

View File

@ -50,7 +50,7 @@ public:
SettingsDialog(std::unique_ptr<SettingsInterface> sif, const GameList::Entry* game, u32 game_crc); SettingsDialog(std::unique_ptr<SettingsInterface> sif, const GameList::Entry* game, u32 game_crc);
~SettingsDialog(); ~SettingsDialog();
static void openGamePropertiesDialog(const GameList::Entry* game, u32 crc); static void openGamePropertiesDialog(const GameList::Entry* game, const std::string_view& serial, u32 crc);
__fi bool isPerGameSettings() const { return static_cast<bool>(m_sif); } __fi bool isPerGameSettings() const { return static_cast<bool>(m_sif); }
__fi SettingsInterface* getSettingsInterface() const { return m_sif.get(); } __fi SettingsInterface* getSettingsInterface() const { return m_sif.get(); }

View File

@ -285,9 +285,14 @@ void VMManager::ApplyGameFixes()
s_active_game_fixes += game->applyGSHardwareFixes(EmuConfig.GS); s_active_game_fixes += game->applyGSHardwareFixes(EmuConfig.GS);
} }
std::string VMManager::GetGameSettingsPath(u32 game_crc) std::string VMManager::GetGameSettingsPath(const std::string_view& game_serial, u32 game_crc)
{ {
return Path::Combine(EmuFolders::GameSettings, StringUtil::StdStringFromFormat("%08X.ini", game_crc)); std::string sanitized_serial(game_serial);
Path::SanitizeFileName(sanitized_serial);
return game_serial.empty() ?
Path::Combine(EmuFolders::GameSettings, fmt::format("{:08X}.ini", game_crc)) :
Path::Combine(EmuFolders::GameSettings, fmt::format("{}_{:08X}.ini", sanitized_serial, game_crc));
} }
void VMManager::RequestDisplaySize(float scale /*= 0.0f*/) void VMManager::RequestDisplaySize(float scale /*= 0.0f*/)
@ -341,7 +346,13 @@ bool VMManager::UpdateGameSettingsLayer()
std::unique_ptr<INISettingsInterface> new_interface; std::unique_ptr<INISettingsInterface> new_interface;
if (s_game_crc != 0) if (s_game_crc != 0)
{ {
const std::string filename(GetGameSettingsPath(s_game_crc)); std::string filename(GetGameSettingsPath(s_game_serial.c_str(), s_game_crc));
if (!FileSystem::FileExists(filename.c_str()))
{
// try the legacy format (crc.ini)
filename = GetGameSettingsPath({}, s_game_crc);
}
if (FileSystem::FileExists(filename.c_str())) if (FileSystem::FileExists(filename.c_str()))
{ {
Console.WriteLn("Loading game settings from '%s'...", filename.c_str()); Console.WriteLn("Loading game settings from '%s'...", filename.c_str());

View File

@ -141,7 +141,7 @@ namespace VMManager
bool IsGSDumpFileName(const std::string& path); bool IsGSDumpFileName(const std::string& path);
/// Returns the path for the game settings ini file for the specified CRC. /// Returns the path for the game settings ini file for the specified CRC.
std::string GetGameSettingsPath(u32 game_crc); std::string GetGameSettingsPath(const std::string_view& game_serial, u32 game_crc);
/// Resizes the render window to the display size, with an optional scale. /// Resizes the render window to the display size, with an optional scale.
/// If the scale is set to 0, the internal resolution will be used, otherwise it is treated as a multiplier to 1x. /// If the scale is set to 0, the internal resolution will be used, otherwise it is treated as a multiplier to 1x.