| 654 | } |
| 655 | |
| 656 | void FileMcd_Swap() |
| 657 | { |
| 658 | if (MemcardBusy::IsBusy()) |
| 659 | { |
| 660 | Host::AddIconOSDMessage("MemoryCardSwap_Busy", ICON_PF_MEMORY_CARD, TRANSLATE_SV("MemoryCardSwap_Busy", "Memory cards are busy. Can't swap right now.")); |
| 661 | return; |
| 662 | } |
| 663 | |
| 664 | // Check if auto-eject is active |
| 665 | if (FileMcd_IsAutoEjecting()) |
| 666 | { |
| 667 | Host::AddIconOSDMessage("MemoryCardSwap_AutoEject", ICON_PF_MEMORY_CARD, TRANSLATE_SV("MemoryCardSwap_AutoEject", "Memory cards are being auto-ejected. Can't swap right now.")); |
| 668 | return; |
| 669 | } |
| 670 | |
| 671 | const std::string card1Filename = Host::GetStringSettingValue("MemoryCards", "Slot1_Filename"); |
| 672 | const std::string card2Filename = Host::GetStringSettingValue("MemoryCards", "Slot2_Filename"); |
| 673 | |
| 674 | // Copy each McdOptions to local memory |
| 675 | Pcsx2Config::McdOptions firstSlot = EmuConfig.Mcd[0]; |
| 676 | Pcsx2Config::McdOptions secondSlot = EmuConfig.Mcd[1]; |
| 677 | |
| 678 | if (!firstSlot.Enabled || !secondSlot.Enabled || card1Filename.empty() || card2Filename.empty()) |
| 679 | { |
| 680 | Host::AddIconOSDMessage("MemoryCardSwap_EmptySlot", ICON_PF_MEMORY_CARD, TRANSLATE_SV("MemoryCard_EmptySlot", "Both slots must have a card selected to swap.")); |
| 681 | return; |
| 682 | } |
| 683 | |
| 684 | // Swap them |
| 685 | Host::SetBaseStringSettingValue("MemoryCards", "Slot1_Filename", card2Filename.c_str()); |
| 686 | Host::SetBaseStringSettingValue("MemoryCards", "Slot2_Filename", card1Filename.c_str()); |
| 687 | Host::CommitBaseSettingChanges(); |
| 688 | VMManager::ApplySettings(); |
| 689 | EmuConfig.Mcd[0] = secondSlot; |
| 690 | EmuConfig.Mcd[1] = firstSlot; |
| 691 | |
| 692 | // Reopen them |
| 693 | FileMcd_EmuClose(); |
| 694 | FileMcd_SetType(); |
| 695 | FileMcd_EmuOpen(); |
| 696 | AutoEject::SetAll(); |
| 697 | Host::AddIconOSDMessage("MemoryCardSwap", ICON_PF_MEMORY_CARD, fmt::format(TRANSLATE_FS("MemoryCardSwap", "Memory Cards have been swapped.\nSlot 1: {}\nSlot 2: {}"), EmuConfig.Mcd[0].Filename, EmuConfig.Mcd[1].Filename), Host::OSD_INFO_DURATION); |
| 698 | } |
| 699 | |
| 700 | s32 FileMcd_IsPresent(uint port, uint slot) |
| 701 | { |
no test coverage detected