WiiRoot: Use new filesystem interface
This gets rid of remaining direct accesses to the Wii filesystem in WiiRoot by using WiiSave to copy saves and the FS interface
This commit is contained in:
parent
8fce18e4ff
commit
c1428b6da0
|
@ -4,6 +4,7 @@
|
||||||
|
|
||||||
#include "Core/WiiRoot.h"
|
#include "Core/WiiRoot.h"
|
||||||
|
|
||||||
|
#include <cinttypes>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
|
@ -15,6 +16,7 @@
|
||||||
#include "Common/NandPaths.h"
|
#include "Common/NandPaths.h"
|
||||||
#include "Common/StringUtil.h"
|
#include "Common/StringUtil.h"
|
||||||
#include "Core/ConfigManager.h"
|
#include "Core/ConfigManager.h"
|
||||||
|
#include "Core/HW/WiiSave.h"
|
||||||
#include "Core/IOS/FS/FileSystem.h"
|
#include "Core/IOS/FS/FileSystem.h"
|
||||||
#include "Core/IOS/IOS.h"
|
#include "Core/IOS/IOS.h"
|
||||||
#include "Core/IOS/Uids.h"
|
#include "Core/IOS/Uids.h"
|
||||||
|
@ -26,12 +28,10 @@ namespace Core
|
||||||
{
|
{
|
||||||
static std::string s_temp_wii_root;
|
static std::string s_temp_wii_root;
|
||||||
|
|
||||||
static void InitializeDeterministicWiiSaves()
|
static void InitializeDeterministicWiiSaves(IOS::HLE::FS::FileSystem* session_fs)
|
||||||
{
|
{
|
||||||
std::string save_path =
|
const u64 title_id = SConfig::GetInstance().GetTitleID();
|
||||||
Common::GetTitleDataPath(SConfig::GetInstance().GetTitleID(), Common::FROM_SESSION_ROOT);
|
const auto configured_fs = IOS::HLE::FS::MakeFileSystem(IOS::HLE::FS::Location::Configured);
|
||||||
std::string user_save_path =
|
|
||||||
Common::GetTitleDataPath(SConfig::GetInstance().GetTitleID(), Common::FROM_CONFIGURED_ROOT);
|
|
||||||
if (Movie::IsRecordingInput())
|
if (Movie::IsRecordingInput())
|
||||||
{
|
{
|
||||||
if (NetPlay::IsNetPlayRunning() && !SConfig::GetInstance().bCopyWiiSaveNetplay)
|
if (NetPlay::IsNetPlayRunning() && !SConfig::GetInstance().bCopyWiiSaveNetplay)
|
||||||
|
@ -41,7 +41,8 @@ static void InitializeDeterministicWiiSaves()
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// TODO: Check for the actual save data
|
// TODO: Check for the actual save data
|
||||||
Movie::SetClearSave(!File::Exists(user_save_path + "/banner.bin"));
|
const std::string path = Common::GetTitleDataPath(title_id) + "/banner.bin";
|
||||||
|
Movie::SetClearSave(!configured_fs->GetMetadata(IOS::PID_KERNEL, IOS::PID_KERNEL, path));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -49,10 +50,9 @@ static void InitializeDeterministicWiiSaves()
|
||||||
(Movie::IsMovieActive() && !Movie::IsStartingFromClearSave()))
|
(Movie::IsMovieActive() && !Movie::IsStartingFromClearSave()))
|
||||||
{
|
{
|
||||||
// Copy the current user's save to the Blank NAND
|
// Copy the current user's save to the Blank NAND
|
||||||
if (File::Exists(user_save_path + "/banner.bin"))
|
const auto user_save = WiiSave::MakeNandStorage(configured_fs.get(), title_id);
|
||||||
{
|
const auto session_save = WiiSave::MakeNandStorage(session_fs, title_id);
|
||||||
File::CopyDir(user_save_path, save_path);
|
WiiSave::Copy(user_save.get(), session_save.get());
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -142,32 +142,28 @@ void InitializeWiiFileSystemContents()
|
||||||
SysConf sysconf{fs};
|
SysConf sysconf{fs};
|
||||||
sysconf.Save();
|
sysconf.Save();
|
||||||
|
|
||||||
InitializeDeterministicWiiSaves();
|
InitializeDeterministicWiiSaves(fs.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
void CleanUpWiiFileSystemContents()
|
void CleanUpWiiFileSystemContents()
|
||||||
{
|
{
|
||||||
if (s_temp_wii_root.empty())
|
if (s_temp_wii_root.empty() || !SConfig::GetInstance().bEnableMemcardSdWriting)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
const u64 title_id = SConfig::GetInstance().GetTitleID();
|
const u64 title_id = SConfig::GetInstance().GetTitleID();
|
||||||
std::string save_path = Common::GetTitleDataPath(title_id, Common::FROM_SESSION_ROOT);
|
|
||||||
std::string user_save_path = Common::GetTitleDataPath(title_id, Common::FROM_CONFIGURED_ROOT);
|
IOS::HLE::EmulationKernel* ios = IOS::HLE::GetIOS();
|
||||||
std::string user_backup_path =
|
const auto session_save = WiiSave::MakeNandStorage(ios->GetFS().get(), title_id);
|
||||||
File::GetUserPath(D_BACKUP_IDX) +
|
|
||||||
StringFromFormat("%08x/%08x/", static_cast<u32>(title_id >> 32), static_cast<u32>(title_id));
|
const auto configured_fs = IOS::HLE::FS::MakeFileSystem(IOS::HLE::FS::Location::Configured);
|
||||||
if (File::Exists(save_path + "/banner.bin") && SConfig::GetInstance().bEnableMemcardSdWriting)
|
const auto user_save = WiiSave::MakeNandStorage(configured_fs.get(), title_id);
|
||||||
{
|
|
||||||
// Backup the existing save just in case it's still needed.
|
const std::string backup_path =
|
||||||
if (File::Exists(user_save_path + "/banner.bin"))
|
File::GetUserPath(D_BACKUP_IDX) + StringFromFormat("/%016" PRIx64 ".bin", title_id);
|
||||||
{
|
const auto backup_save = WiiSave::MakeDataBinStorage(&ios->GetIOSC(), backup_path, "w+b");
|
||||||
if (File::Exists(user_backup_path))
|
|
||||||
File::DeleteDirRecursively(user_backup_path);
|
// Backup the existing save just in case it's still needed.
|
||||||
File::CopyDir(user_save_path, user_backup_path);
|
WiiSave::Copy(user_save.get(), backup_save.get());
|
||||||
File::DeleteDirRecursively(user_save_path);
|
WiiSave::Copy(session_save.get(), user_save.get());
|
||||||
}
|
|
||||||
File::CopyDir(save_path, user_save_path);
|
|
||||||
File::DeleteDirRecursively(save_path);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} // namespace Core
|
} // namespace Core
|
||||||
|
|
Loading…
Reference in New Issue