System: Prevent memcard blocking resume state save
Because otherwise you end up with a stale/old resume state, which is arguably worse.
This commit is contained in:
parent
9b0a906297
commit
31d953dac2
|
@ -6535,7 +6535,7 @@ void FullscreenUI::DoSaveState(s32 slot, bool global)
|
||||||
std::string filename(global ? System::GetGlobalSaveStateFileName(slot) :
|
std::string filename(global ? System::GetGlobalSaveStateFileName(slot) :
|
||||||
System::GetGameSaveStateFileName(System::GetGameSerial(), slot));
|
System::GetGameSaveStateFileName(System::GetGameSerial(), slot));
|
||||||
Error error;
|
Error error;
|
||||||
if (!System::SaveState(filename.c_str(), &error, g_settings.create_save_state_backups))
|
if (!System::SaveState(filename.c_str(), &error, g_settings.create_save_state_backups, false))
|
||||||
{
|
{
|
||||||
ShowToast(std::string(), fmt::format(TRANSLATE_FS("System", "Failed to save state: {}"), error.GetDescription()));
|
ShowToast(std::string(), fmt::format(TRANSLATE_FS("System", "Failed to save state: {}"), error.GetDescription()));
|
||||||
}
|
}
|
||||||
|
|
|
@ -111,7 +111,7 @@ static void HotkeySaveStateSlot(bool global, s32 slot)
|
||||||
std::string path(global ? System::GetGlobalSaveStateFileName(slot) :
|
std::string path(global ? System::GetGlobalSaveStateFileName(slot) :
|
||||||
System::GetGameSaveStateFileName(System::GetGameSerial(), slot));
|
System::GetGameSaveStateFileName(System::GetGameSerial(), slot));
|
||||||
Error error;
|
Error error;
|
||||||
if (!System::SaveState(path.c_str(), &error, g_settings.create_save_state_backups))
|
if (!System::SaveState(path.c_str(), &error, g_settings.create_save_state_backups, false))
|
||||||
{
|
{
|
||||||
Host::AddIconOSDMessage(
|
Host::AddIconOSDMessage(
|
||||||
"SaveState", ICON_FA_EXCLAMATION_TRIANGLE,
|
"SaveState", ICON_FA_EXCLAMATION_TRIANGLE,
|
||||||
|
|
|
@ -1277,7 +1277,7 @@ void SaveStateSelectorUI::SaveCurrentSlot()
|
||||||
if (std::string path = GetCurrentSlotPath(); !path.empty())
|
if (std::string path = GetCurrentSlotPath(); !path.empty())
|
||||||
{
|
{
|
||||||
Error error;
|
Error error;
|
||||||
if (!System::SaveState(path.c_str(), &error, g_settings.create_save_state_backups))
|
if (!System::SaveState(path.c_str(), &error, g_settings.create_save_state_backups, false))
|
||||||
{
|
{
|
||||||
Host::AddIconOSDMessage("SaveState", ICON_EMOJI_WARNING,
|
Host::AddIconOSDMessage("SaveState", ICON_EMOJI_WARNING,
|
||||||
fmt::format(TRANSLATE_FS("OSDMessage", "Failed to save state to slot {0}:\n{1}"),
|
fmt::format(TRANSLATE_FS("OSDMessage", "Failed to save state to slot {0}:\n{1}"),
|
||||||
|
|
|
@ -1664,7 +1664,7 @@ bool System::SaveResumeState(Error* error)
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::string path(GetGameSaveStateFileName(s_state.running_game_serial, -1));
|
const std::string path(GetGameSaveStateFileName(s_state.running_game_serial, -1));
|
||||||
return SaveState(path.c_str(), error, false);
|
return SaveState(path.c_str(), error, false, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool System::BootSystem(SystemBootParameters parameters, Error* error)
|
bool System::BootSystem(SystemBootParameters parameters, Error* error)
|
||||||
|
@ -3010,14 +3010,14 @@ bool System::ReadAndDecompressStateData(std::FILE* fp, std::span<u8> dst, u32 fi
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool System::SaveState(const char* path, Error* error, bool backup_existing_save)
|
bool System::SaveState(const char* path, Error* error, bool backup_existing_save, bool ignore_memcard_busy)
|
||||||
{
|
{
|
||||||
if (!IsValid() || IsReplayingGPUDump())
|
if (!IsValid() || IsReplayingGPUDump())
|
||||||
{
|
{
|
||||||
Error::SetStringView(error, TRANSLATE_SV("System", "System is not in correct state."));
|
Error::SetStringView(error, TRANSLATE_SV("System", "System is not in correct state."));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
else if (IsSavingMemoryCards())
|
else if (!ignore_memcard_busy && IsSavingMemoryCards())
|
||||||
{
|
{
|
||||||
Error::SetStringView(error, TRANSLATE_SV("System", "Cannot save state while memory card is being saved."));
|
Error::SetStringView(error, TRANSLATE_SV("System", "Cannot save state while memory card is being saved."));
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -256,7 +256,7 @@ void ResetSystem();
|
||||||
|
|
||||||
/// Loads state from the specified path.
|
/// Loads state from the specified path.
|
||||||
bool LoadState(const char* path, Error* error, bool save_undo_state);
|
bool LoadState(const char* path, Error* error, bool save_undo_state);
|
||||||
bool SaveState(const char* path, Error* error, bool backup_existing_save);
|
bool SaveState(const char* path, Error* error, bool backup_existing_save, bool ignore_memcard_busy);
|
||||||
bool SaveResumeState(Error* error);
|
bool SaveResumeState(Error* error);
|
||||||
|
|
||||||
/// Runs the VM until the CPU execution is canceled.
|
/// Runs the VM until the CPU execution is canceled.
|
||||||
|
|
|
@ -1412,7 +1412,7 @@ void EmuThread::saveState(const QString& filename, bool block_until_done /* = fa
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Error error;
|
Error error;
|
||||||
if (!System::SaveState(filename.toUtf8().data(), &error, g_settings.create_save_state_backups))
|
if (!System::SaveState(filename.toUtf8().data(), &error, g_settings.create_save_state_backups, false))
|
||||||
emit errorReported(tr("Error"), tr("Failed to save state: %1").arg(QString::fromStdString(error.GetDescription())));
|
emit errorReported(tr("Error"), tr("Failed to save state: %1").arg(QString::fromStdString(error.GetDescription())));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1432,7 +1432,7 @@ void EmuThread::saveState(bool global, qint32 slot, bool block_until_done /* = f
|
||||||
if (!System::SaveState((global ? System::GetGlobalSaveStateFileName(slot) :
|
if (!System::SaveState((global ? System::GetGlobalSaveStateFileName(slot) :
|
||||||
System::GetGameSaveStateFileName(System::GetGameSerial(), slot))
|
System::GetGameSaveStateFileName(System::GetGameSerial(), slot))
|
||||||
.c_str(),
|
.c_str(),
|
||||||
&error, g_settings.create_save_state_backups))
|
&error, g_settings.create_save_state_backups, false))
|
||||||
{
|
{
|
||||||
emit errorReported(tr("Error"), tr("Failed to save state: %1").arg(QString::fromStdString(error.GetDescription())));
|
emit errorReported(tr("Error"), tr("Failed to save state: %1").arg(QString::fromStdString(error.GetDescription())));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue