mirror of
https://github.com/RetroDECK/Duckstation.git
synced 2025-02-18 11:55:38 +00:00
CommonHostInterface: Add save state backup option
This commit is contained in:
parent
53cabbb134
commit
24306be757
|
@ -198,6 +198,9 @@ AdvancedSettingsWidget::AdvancedSettingsWidget(QtHostInterface* host_interface,
|
||||||
addBooleanTweakOption(m_host_interface, m_ui.tweakOptionTable, tr("Allow Booting Without SBI File"), "CDROM",
|
addBooleanTweakOption(m_host_interface, m_ui.tweakOptionTable, tr("Allow Booting Without SBI File"), "CDROM",
|
||||||
"AllowBootingWithoutSBIFile", false);
|
"AllowBootingWithoutSBIFile", false);
|
||||||
|
|
||||||
|
addBooleanTweakOption(m_host_interface, m_ui.tweakOptionTable, tr("Create Save State Backups"), "General",
|
||||||
|
"CreateSaveStateBackups", false);
|
||||||
|
|
||||||
dialog->registerWidgetHelp(m_ui.logLevel, tr("Log Level"), tr("Information"),
|
dialog->registerWidgetHelp(m_ui.logLevel, tr("Log Level"), tr("Information"),
|
||||||
tr("Sets the verbosity of messages logged. Higher levels will log more messages."));
|
tr("Sets the verbosity of messages logged. Higher levels will log more messages."));
|
||||||
dialog->registerWidgetHelp(m_ui.logToConsole, tr("Log To System Console"), tr("User Preference"),
|
dialog->registerWidgetHelp(m_ui.logToConsole, tr("Log To System Console"), tr("User Preference"),
|
||||||
|
@ -238,4 +241,5 @@ void AdvancedSettingsWidget::onResetToDefaultClicked()
|
||||||
setBooleanTweakOption(m_ui.tweakOptionTable, 19, false);
|
setBooleanTweakOption(m_ui.tweakOptionTable, 19, false);
|
||||||
setBooleanTweakOption(m_ui.tweakOptionTable, 20, true);
|
setBooleanTweakOption(m_ui.tweakOptionTable, 20, true);
|
||||||
setBooleanTweakOption(m_ui.tweakOptionTable, 21, false);
|
setBooleanTweakOption(m_ui.tweakOptionTable, 21, false);
|
||||||
|
setBooleanTweakOption(m_ui.tweakOptionTable, 22, false);
|
||||||
}
|
}
|
||||||
|
|
|
@ -789,6 +789,7 @@ bool CommonHostInterface::SaveState(bool global, s32 slot)
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string save_path = global ? GetGlobalSaveStateFileName(slot) : GetGameSaveStateFileName(code.c_str(), slot);
|
std::string save_path = global ? GetGlobalSaveStateFileName(slot) : GetGameSaveStateFileName(code.c_str(), slot);
|
||||||
|
RenameCurrentSaveStateToBackup(save_path.c_str());
|
||||||
if (!SaveState(save_path.c_str()))
|
if (!SaveState(save_path.c_str()))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
@ -2745,6 +2746,24 @@ std::string CommonHostInterface::GetGlobalSaveStateFileName(s32 slot) const
|
||||||
return GetUserDirectoryRelativePath("savestates" FS_OSPATH_SEPARATOR_STR "savestate_%d.sav", slot);
|
return GetUserDirectoryRelativePath("savestates" FS_OSPATH_SEPARATOR_STR "savestate_%d.sav", slot);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CommonHostInterface::RenameCurrentSaveStateToBackup(const char* filename)
|
||||||
|
{
|
||||||
|
if (!GetBoolSettingValue("General", "CreateSaveStateBackups", false))
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (!FileSystem::FileExists(filename))
|
||||||
|
return;
|
||||||
|
|
||||||
|
const std::string backup_filename(FileSystem::ReplaceExtension(filename, "bak"));
|
||||||
|
if (!FileSystem::RenamePath(filename, backup_filename.c_str()))
|
||||||
|
{
|
||||||
|
Log_ErrorPrintf("Failed to rename save state backup '%s'", backup_filename.c_str());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Log_InfoPrintf("Renamed save state '%s' to '%s'", filename, backup_filename.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
std::vector<CommonHostInterface::SaveStateInfo> CommonHostInterface::GetAvailableSaveStates(const char* game_code) const
|
std::vector<CommonHostInterface::SaveStateInfo> CommonHostInterface::GetAvailableSaveStates(const char* game_code) const
|
||||||
{
|
{
|
||||||
std::vector<SaveStateInfo> si;
|
std::vector<SaveStateInfo> si;
|
||||||
|
|
|
@ -404,6 +404,9 @@ protected:
|
||||||
/// Returns the path to a save state file. Specifying an index of -1 is the "resume" save state.
|
/// Returns the path to a save state file. Specifying an index of -1 is the "resume" save state.
|
||||||
std::string GetGlobalSaveStateFileName(s32 slot) const;
|
std::string GetGlobalSaveStateFileName(s32 slot) const;
|
||||||
|
|
||||||
|
/// Moves the current save state file to a backup name, if it exists.
|
||||||
|
void RenameCurrentSaveStateToBackup(const char* filename);
|
||||||
|
|
||||||
/// Sets the base path for the user directory. Can be overridden by platform/frontend/command line.
|
/// Sets the base path for the user directory. Can be overridden by platform/frontend/command line.
|
||||||
virtual void SetUserDirectory();
|
virtual void SetUserDirectory();
|
||||||
|
|
||||||
|
|
|
@ -2526,6 +2526,14 @@ void DrawSettingsWindow()
|
||||||
&s_settings_copy.increase_timer_resolution);
|
&s_settings_copy.increase_timer_resolution);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
settings_changed |= ToggleButtonForNonSetting("Allow Booting Without SBI File",
|
||||||
|
"Allows loading protected games without subchannel information.",
|
||||||
|
"CDROM", "AllowBootingWithoutSBIFile", false);
|
||||||
|
|
||||||
|
settings_changed |= ToggleButtonForNonSetting("Create Save State Backups",
|
||||||
|
"Renames existing save states when saving to a backup file.",
|
||||||
|
"General", "CreateSaveStateBackups", false);
|
||||||
|
|
||||||
MenuHeading("Display Settings");
|
MenuHeading("Display Settings");
|
||||||
settings_changed |= ToggleButtonForNonSetting("Show Status Indicators",
|
settings_changed |= ToggleButtonForNonSetting("Show Status Indicators",
|
||||||
"Shows persistent icons when turbo is active or when paused.",
|
"Shows persistent icons when turbo is active or when paused.",
|
||||||
|
|
Loading…
Reference in a new issue