diff --git a/Source/Core/DolphinWX/Src/Frame.cpp b/Source/Core/DolphinWX/Src/Frame.cpp index 613cdc35ab..5d0113ef53 100644 --- a/Source/Core/DolphinWX/Src/Frame.cpp +++ b/Source/Core/DolphinWX/Src/Frame.cpp @@ -191,6 +191,7 @@ EVT_MENU(IDM_NETPLAY, CFrame::OnNetPlay) EVT_MENU(IDM_BROWSE, CFrame::OnBrowse) EVT_MENU(IDM_MEMCARD, CFrame::OnMemcard) EVT_MENU(IDM_IMPORTSAVE, CFrame::OnImportSave) +EVT_MENU(IDM_EXPORTALLSAVE, CFrame::OnExportAllSaves) EVT_MENU(IDM_CHEATS, CFrame::OnShow_CheatsWindow) EVT_MENU(IDM_CHANGEDISC, CFrame::OnChangeDisc) EVT_MENU(IDM_MENU_INSTALLWAD, CFrame::OnInstallWAD) diff --git a/Source/Core/DolphinWX/Src/Frame.h b/Source/Core/DolphinWX/Src/Frame.h index 2891d9931c..a904a7aa5f 100644 --- a/Source/Core/DolphinWX/Src/Frame.h +++ b/Source/Core/DolphinWX/Src/Frame.h @@ -324,6 +324,7 @@ private: void OnMemcard(wxCommandEvent& event); // Misc void OnImportSave(wxCommandEvent& event); + void OnExportAllSaves(wxCommandEvent& event); void OnNetPlay(wxCommandEvent& event); diff --git a/Source/Core/DolphinWX/Src/FrameTools.cpp b/Source/Core/DolphinWX/Src/FrameTools.cpp index 40bc29a1ec..6663a59665 100644 --- a/Source/Core/DolphinWX/Src/FrameTools.cpp +++ b/Source/Core/DolphinWX/Src/FrameTools.cpp @@ -190,7 +190,8 @@ void CFrame::CreateMenu() // Tools menu wxMenu* toolsMenu = new wxMenu; toolsMenu->Append(IDM_MEMCARD, _("&Memcard Manager (GC)")); - toolsMenu->Append(IDM_IMPORTSAVE, _("Wii Save Import")); + toolsMenu->Append(IDM_IMPORTSAVE, _("Import Wii Save")); + toolsMenu->Append(IDM_EXPORTALLSAVE, _("Export All Wii Saves")); toolsMenu->Append(IDM_CHEATS, _("&Cheats Manager")); toolsMenu->Append(IDM_NETPLAY, _("Start &NetPlay")); @@ -1310,6 +1311,11 @@ void CFrame::OnMemcard(wxCommandEvent& WXUNUSED (event)) MemcardManager.ShowModal(); } +void CFrame::OnExportAllSaves(wxCommandEvent& WXUNUSED (event)) +{ + CWiiSaveCrypted::ExportAllSaves(); +} + void CFrame::OnImportSave(wxCommandEvent& WXUNUSED (event)) { wxString path = wxFileSelector(_("Select the save file"), diff --git a/Source/Core/DolphinWX/Src/Globals.h b/Source/Core/DolphinWX/Src/Globals.h index 5930427620..f55a6b2b66 100644 --- a/Source/Core/DolphinWX/Src/Globals.h +++ b/Source/Core/DolphinWX/Src/Globals.h @@ -231,6 +231,7 @@ enum IDM_OPENSAVEFOLDER, IDM_EXPORTSAVE, IDM_IMPORTSAVE, + IDM_EXPORTALLSAVE, IDM_SETDEFAULTGCM, IDM_DELETEGCM, IDM_COMPRESSGCM, diff --git a/Source/Core/DolphinWX/Src/MemoryCards/WiiSaveCrypted.cpp b/Source/Core/DolphinWX/Src/MemoryCards/WiiSaveCrypted.cpp index 641805fc1b..31985f374f 100644 --- a/Source/Core/DolphinWX/Src/MemoryCards/WiiSaveCrypted.cpp +++ b/Source/Core/DolphinWX/Src/MemoryCards/WiiSaveCrypted.cpp @@ -11,6 +11,7 @@ #include "FileUtil.h" #include "MathUtil.h" #include "NandPaths.h" +#include "FileUtil.h" #include static Common::replace_v replacements; @@ -33,6 +34,41 @@ bool CWiiSaveCrypted::ExportWiiSave(u64 TitleID) return exportSave.b_valid; } +void CWiiSaveCrypted::ExportAllSaves() +{ + std::string titleFolder = File::GetUserPath(D_WIIUSER_IDX) + "title"; + std::vector titles; + u32 pathMask = 0x00010000; + for (int i = 0; i < 8; ++i) + { + File::FSTEntry FST_Temp; + std::string folder = StringFromFormat("%s/%08x/", titleFolder.c_str(), pathMask | i); + File::ScanDirectoryTree(folder, FST_Temp); + + for (u32 j = 0; j < FST_Temp.children.size(); j++) + { + if (FST_Temp.children[j].isDirectory) + { + u32 gameid; + if (AsciiToHex(FST_Temp.children[j].virtualName.c_str(), gameid)) + { + std::string bannerPath = StringFromFormat("%s%08x/data/banner.bin", folder.c_str(), gameid); + if (File::Exists(bannerPath)) + { + u64 titleID = (((u64)pathMask | i) << 32) | gameid; + titles.push_back(titleID); + } + } + } + } + } + SuccessAlertT("Found %llx save files", titles.size()); + for (u32 i = 0; i < titles.size(); ++i) + { + CWiiSaveCrypted* exportSave = new CWiiSaveCrypted("", titles[i]); + delete exportSave; + } +} CWiiSaveCrypted::CWiiSaveCrypted(const char* FileName, u64 TitleID) : m_TitleID(TitleID) { diff --git a/Source/Core/DolphinWX/Src/MemoryCards/WiiSaveCrypted.h b/Source/Core/DolphinWX/Src/MemoryCards/WiiSaveCrypted.h index e4fd67134d..e3a77b4f72 100644 --- a/Source/Core/DolphinWX/Src/MemoryCards/WiiSaveCrypted.h +++ b/Source/Core/DolphinWX/Src/MemoryCards/WiiSaveCrypted.h @@ -18,6 +18,7 @@ class CWiiSaveCrypted public: bool static ImportWiiSave(const char* FileName); bool static ExportWiiSave(u64 TitleID); + void static ExportAllSaves(); private: CWiiSaveCrypted(const char* FileName, u64 TitleID = 0);