From 94d0dd7b42702c8eb713ac772f309aa8ad4d57a0 Mon Sep 17 00:00:00 2001 From: Stenzek Date: Tue, 3 Sep 2024 20:13:03 +1000 Subject: [PATCH] MemoryCard: Defer creation of card until first save Also do not overwrite the card if it failed to load. --- src/core/memory_card.cpp | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/src/core/memory_card.cpp b/src/core/memory_card.cpp index 9e9d86040..2c462471a 100644 --- a/src/core/memory_card.cpp +++ b/src/core/memory_card.cpp @@ -302,17 +302,23 @@ std::unique_ptr MemoryCard::Open(std::string_view filename) if (!FileSystem::FileExists(mc->m_filename.c_str())) [[unlikely]] { Host::AddIconOSDMessage(fmt::format("memory_card_{}", filename), ICON_FA_SD_CARD, - fmt::format(TRANSLATE_FS("OSDMessage", "Memory card '{}' does not exist, creating."), - Path::GetFileName(filename), Host::OSD_INFO_DURATION)); + fmt::format(TRANSLATE_FS("MemoryCard", "{} does not exist, using empty memory card."), + Path::GetFileName(filename)), + Host::OSD_INFO_DURATION); mc->Format(); - mc->SaveIfChanged(true); + mc->m_changed = false; } else if (!MemoryCardImage::LoadFromFile(&mc->m_data, mc->m_filename.c_str(), &error)) [[unlikely]] { - Host::AddIconOSDMessage(fmt::format("memory_card_{}", filename), ICON_FA_SD_CARD, - fmt::format(TRANSLATE_FS("OSDMessage", "Memory card '{}' could not be read: {}"), - Path::GetFileName(filename), Host::OSD_INFO_DURATION)); + Host::AddIconOSDMessage( + fmt::format("memory_card_{}", filename), ICON_FA_SD_CARD, + fmt::format(TRANSLATE_FS("MemoryCard", "{} could not be read:\n{}\nThe memory card will NOT be saved.\nYou must " + "delete the memory card manually if you want to save."), + Path::GetFileName(filename), error.GetDescription()), + Host::OSD_CRITICAL_ERROR_DURATION); mc->Format(); + mc->m_filename = {}; + mc->m_changed = false; } return mc; @@ -352,7 +358,7 @@ bool MemoryCard::SaveIfChanged(bool display_osd_message) if (display_osd_message) { Host::AddIconOSDMessage(std::move(osd_key), ICON_FA_SD_CARD, - fmt::format(TRANSLATE_FS("OSDMessage", "Failed to save memory card to '{}': {}"), + fmt::format(TRANSLATE_FS("MemoryCard", "Failed to save memory card to '{}': {}"), Path::GetFileName(display_name), error.GetDescription()), Host::OSD_ERROR_DURATION); } @@ -364,7 +370,7 @@ bool MemoryCard::SaveIfChanged(bool display_osd_message) { Host::AddIconOSDMessage( std::move(osd_key), ICON_FA_SD_CARD, - fmt::format(TRANSLATE_FS("OSDMessage", "Saved memory card to '{}'."), Path::GetFileName(display_name)), + fmt::format(TRANSLATE_FS("MemoryCard", "Saved memory card to '{}'."), Path::GetFileName(display_name)), Host::OSD_QUICK_DURATION); }