System: Simplify HC disable confirm on startup
Use one path on all platforms, always asynchronous.
This commit is contained in:
parent
28f6358ec5
commit
4dd6365a99
|
@ -2228,26 +2228,6 @@ bool Achievements::ConfirmSystemReset()
|
|||
return true;
|
||||
}
|
||||
|
||||
bool Achievements::ConfirmHardcoreModeDisable(const char* trigger)
|
||||
{
|
||||
#ifdef ENABLE_RAINTEGRATION
|
||||
if (IsUsingRAIntegration())
|
||||
return (RA_WarnDisableHardcore(trigger) != 0);
|
||||
#endif
|
||||
|
||||
// I really hope this doesn't deadlock :/
|
||||
const bool confirmed = Host::ConfirmMessage(
|
||||
TRANSLATE("Achievements", "Confirm Hardcore Mode"),
|
||||
fmt::format(TRANSLATE_FS("Achievements", "{0} cannot be performed while hardcore mode is active. Do you "
|
||||
"want to disable hardcore mode? {0} will be cancelled if you select No."),
|
||||
trigger));
|
||||
if (!confirmed)
|
||||
return false;
|
||||
|
||||
DisableHardcoreMode();
|
||||
return true;
|
||||
}
|
||||
|
||||
void Achievements::ConfirmHardcoreModeDisableAsync(const char* trigger, std::function<void(bool)> callback)
|
||||
{
|
||||
auto real_callback = [callback = std::move(callback)](bool res) mutable {
|
||||
|
@ -2259,43 +2239,21 @@ void Achievements::ConfirmHardcoreModeDisableAsync(const char* trigger, std::fun
|
|||
});
|
||||
};
|
||||
|
||||
#ifndef __ANDROID__
|
||||
#ifdef ENABLE_RAINTEGRATION
|
||||
if (IsUsingRAIntegration())
|
||||
{
|
||||
const bool result = (RA_WarnDisableHardcore(trigger) != 0);
|
||||
callback(result);
|
||||
real_callback(result);
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
GPUThread::RunOnThread([trigger = std::string(trigger), real_callback = std::move(real_callback)]() mutable {
|
||||
if (!FullscreenUI::Initialize())
|
||||
{
|
||||
Host::AddOSDMessage(
|
||||
fmt::format(TRANSLATE_FS("Achievements", "Cannot {} while hardcode mode is active."), trigger),
|
||||
Host::OSD_WARNING_DURATION);
|
||||
real_callback(false);
|
||||
return;
|
||||
}
|
||||
|
||||
ImGuiFullscreen::OpenConfirmMessageDialog(
|
||||
TRANSLATE_STR("Achievements", "Confirm Hardcore Mode"),
|
||||
fmt::format(TRANSLATE_FS("Achievements",
|
||||
"{0} cannot be performed while hardcore mode is active. Do you "
|
||||
"want to disable hardcore mode? {0} will be cancelled if you select No."),
|
||||
trigger),
|
||||
std::move(real_callback), fmt::format(ICON_FA_CHECK " {}", TRANSLATE_SV("Achievements", "Yes")),
|
||||
fmt::format(ICON_FA_TIMES " {}", TRANSLATE_SV("Achievements", "No")));
|
||||
});
|
||||
#else
|
||||
Host::ConfirmMessageAsync(
|
||||
TRANSLATE_STR("Achievements", "Confirm Hardcore Mode"),
|
||||
fmt::format(TRANSLATE_FS("Achievements", "{0} cannot be performed while hardcore mode is active. Do you want to "
|
||||
"disable hardcore mode? {0} will be cancelled if you select No."),
|
||||
trigger),
|
||||
std::move(real_callback));
|
||||
#endif
|
||||
}
|
||||
|
||||
void Achievements::ClearUIState()
|
||||
|
|
|
@ -116,7 +116,6 @@ bool ResetHardcoreMode(bool is_booting);
|
|||
void DisableHardcoreMode();
|
||||
|
||||
/// Prompts the user to disable hardcore mode, if they agree, returns true.
|
||||
bool ConfirmHardcoreModeDisable(const char* trigger);
|
||||
void ConfirmHardcoreModeDisableAsync(const char* trigger, std::function<void(bool)> callback);
|
||||
|
||||
/// Returns true if hardcore mode is active, and functionality should be restricted.
|
||||
|
|
|
@ -1753,33 +1753,21 @@ bool System::BootSystem(SystemBootParameters parameters, Error* error)
|
|||
if ((!parameters.save_state.empty() || !exe_override.empty()) && Achievements::IsHardcoreModeActive())
|
||||
{
|
||||
const bool is_exe_override_boot = parameters.save_state.empty();
|
||||
bool cancelled;
|
||||
if (FullscreenUI::IsInitialized())
|
||||
{
|
||||
Achievements::ConfirmHardcoreModeDisableAsync(is_exe_override_boot ?
|
||||
TRANSLATE("Achievements", "Overriding executable") :
|
||||
TRANSLATE("Achievements", "Resuming state"),
|
||||
[parameters = std::move(parameters)](bool approved) mutable {
|
||||
if (approved)
|
||||
{
|
||||
parameters.disable_achievements_hardcore_mode = true;
|
||||
BootSystem(std::move(parameters), nullptr);
|
||||
}
|
||||
});
|
||||
cancelled = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
cancelled = !Achievements::ConfirmHardcoreModeDisable(is_exe_override_boot ?
|
||||
TRANSLATE("Achievements", "Overriding executable") :
|
||||
TRANSLATE("Achievements", "Resuming state"));
|
||||
}
|
||||
Achievements::ConfirmHardcoreModeDisableAsync(
|
||||
is_exe_override_boot ? TRANSLATE("Achievements", "Overriding executable") :
|
||||
TRANSLATE("Achievements", "Resuming state"),
|
||||
[parameters = std::move(parameters)](bool approved) mutable {
|
||||
if (approved)
|
||||
{
|
||||
Host::RunOnCPUThread([parameters = std::move(parameters)]() mutable {
|
||||
parameters.disable_achievements_hardcore_mode = true;
|
||||
BootSystem(std::move(parameters), nullptr);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
if (cancelled)
|
||||
{
|
||||
// Technically a failure, but user-initiated. Returning false here would try to display a non-existent error.
|
||||
return true;
|
||||
}
|
||||
// Technically a failure, but user-initiated. Returning false here would try to display a non-existent error.
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue