mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-23 06:09:50 -06:00
NetPlay: Add full Wii save sync
This adds the ability to sync all Wii saves, instead of only the selected game. Useful for cases like launching a game though GeckoOS.
This commit is contained in:
@ -17,6 +17,7 @@
|
||||
#include "Common/StringUtil.h"
|
||||
#include "Core/ConfigManager.h"
|
||||
#include "Core/HW/WiiSave.h"
|
||||
#include "Core/IOS/ES/ES.h"
|
||||
#include "Core/IOS/FS/FileSystem.h"
|
||||
#include "Core/IOS/IOS.h"
|
||||
#include "Core/IOS/Uids.h"
|
||||
@ -30,6 +31,16 @@ namespace FS = IOS::HLE::FS;
|
||||
|
||||
static std::string s_temp_wii_root;
|
||||
|
||||
static void CopySave(FS::FileSystem* source, FS::FileSystem* dest, const u64 title_id)
|
||||
{
|
||||
dest->CreateDirectory(IOS::PID_KERNEL, IOS::PID_KERNEL, Common::GetTitleDataPath(title_id), 0,
|
||||
{IOS::HLE::FS::Mode::ReadWrite, IOS::HLE::FS::Mode::ReadWrite,
|
||||
IOS::HLE::FS::Mode::ReadWrite});
|
||||
const auto source_save = WiiSave::MakeNandStorage(source, title_id);
|
||||
const auto dest_save = WiiSave::MakeNandStorage(dest, title_id);
|
||||
WiiSave::Copy(source_save.get(), dest_save.get());
|
||||
}
|
||||
|
||||
static void InitializeDeterministicWiiSaves(FS::FileSystem* session_fs)
|
||||
{
|
||||
const u64 title_id = SConfig::GetInstance().GetTitleID();
|
||||
@ -53,10 +64,28 @@ static void InitializeDeterministicWiiSaves(FS::FileSystem* session_fs)
|
||||
{
|
||||
// Copy the current user's save to the Blank NAND
|
||||
auto* sync_fs = NetPlay::GetWiiSyncFS();
|
||||
const auto user_save =
|
||||
WiiSave::MakeNandStorage(sync_fs ? sync_fs : configured_fs.get(), title_id);
|
||||
const auto session_save = WiiSave::MakeNandStorage(session_fs, title_id);
|
||||
WiiSave::Copy(user_save.get(), session_save.get());
|
||||
auto& sync_titles = NetPlay::GetWiiSyncTitles();
|
||||
if (sync_fs)
|
||||
{
|
||||
for (const u64 title : sync_titles)
|
||||
{
|
||||
CopySave(sync_fs, session_fs, title);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (NetPlay::IsSyncingAllWiiSaves())
|
||||
{
|
||||
for (const u64 title : sync_titles)
|
||||
{
|
||||
CopySave(configured_fs.get(), session_fs, title);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
CopySave(configured_fs.get(), session_fs, title_id);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user