diff options
| author | 2020-11-28 02:33:42 +1100 | |
|---|---|---|
| committer | 2020-11-28 02:33:42 +1100 | |
| commit | f397edff0ea6711bac15cfe47a0157e9b790b8bb (patch) | |
| tree | a12109a226823b444d7261f25e256777af6b93e4 /src | |
| parent | Merge pull request #5018 from lioncash/service-global (diff) | |
| parent | savedata_factory: Eliminate usage of the global system instance (diff) | |
| download | yuzu-f397edff0ea6711bac15cfe47a0157e9b790b8bb.tar.gz yuzu-f397edff0ea6711bac15cfe47a0157e9b790b8bb.tar.xz yuzu-f397edff0ea6711bac15cfe47a0157e9b790b8bb.zip | |
Merge pull request #5023 from lioncash/save-global
savedata_factory: Eliminate usage of the global system instance
Diffstat (limited to 'src')
| -rw-r--r-- | src/core/file_sys/savedata_factory.cpp | 18 | ||||
| -rw-r--r-- | src/core/file_sys/savedata_factory.h | 11 | ||||
| -rw-r--r-- | src/core/hle/service/filesystem/filesystem.cpp | 3 | ||||
| -rw-r--r-- | src/yuzu/main.cpp | 4 |
4 files changed, 22 insertions, 14 deletions
diff --git a/src/core/file_sys/savedata_factory.cpp b/src/core/file_sys/savedata_factory.cpp index ba4efee3a..b7bfe0928 100644 --- a/src/core/file_sys/savedata_factory.cpp +++ b/src/core/file_sys/savedata_factory.cpp | |||
| @@ -70,7 +70,8 @@ std::string SaveDataAttribute::DebugInfo() const { | |||
| 70 | static_cast<u8>(rank), index); | 70 | static_cast<u8>(rank), index); |
| 71 | } | 71 | } |
| 72 | 72 | ||
| 73 | SaveDataFactory::SaveDataFactory(VirtualDir save_directory) : dir(std::move(save_directory)) { | 73 | SaveDataFactory::SaveDataFactory(Core::System& system_, VirtualDir save_directory_) |
| 74 | : dir{std::move(save_directory_)}, system{system_} { | ||
| 74 | // Delete all temporary storages | 75 | // Delete all temporary storages |
| 75 | // On hardware, it is expected that temporary storage be empty at first use. | 76 | // On hardware, it is expected that temporary storage be empty at first use. |
| 76 | dir->DeleteSubdirectoryRecursive("temp"); | 77 | dir->DeleteSubdirectoryRecursive("temp"); |
| @@ -83,7 +84,7 @@ ResultVal<VirtualDir> SaveDataFactory::Create(SaveDataSpaceId space, | |||
| 83 | PrintSaveDataAttributeWarnings(meta); | 84 | PrintSaveDataAttributeWarnings(meta); |
| 84 | 85 | ||
| 85 | const auto save_directory = | 86 | const auto save_directory = |
| 86 | GetFullPath(space, meta.type, meta.title_id, meta.user_id, meta.save_id); | 87 | GetFullPath(system, space, meta.type, meta.title_id, meta.user_id, meta.save_id); |
| 87 | 88 | ||
| 88 | auto out = dir->CreateDirectoryRelative(save_directory); | 89 | auto out = dir->CreateDirectoryRelative(save_directory); |
| 89 | 90 | ||
| @@ -100,7 +101,7 @@ ResultVal<VirtualDir> SaveDataFactory::Open(SaveDataSpaceId space, | |||
| 100 | const SaveDataAttribute& meta) const { | 101 | const SaveDataAttribute& meta) const { |
| 101 | 102 | ||
| 102 | const auto save_directory = | 103 | const auto save_directory = |
| 103 | GetFullPath(space, meta.type, meta.title_id, meta.user_id, meta.save_id); | 104 | GetFullPath(system, space, meta.type, meta.title_id, meta.user_id, meta.save_id); |
| 104 | 105 | ||
| 105 | auto out = dir->GetDirectoryRelative(save_directory); | 106 | auto out = dir->GetDirectoryRelative(save_directory); |
| 106 | 107 | ||
| @@ -135,13 +136,14 @@ std::string SaveDataFactory::GetSaveDataSpaceIdPath(SaveDataSpaceId space) { | |||
| 135 | } | 136 | } |
| 136 | } | 137 | } |
| 137 | 138 | ||
| 138 | std::string SaveDataFactory::GetFullPath(SaveDataSpaceId space, SaveDataType type, u64 title_id, | 139 | std::string SaveDataFactory::GetFullPath(Core::System& system, SaveDataSpaceId space, |
| 139 | u128 user_id, u64 save_id) { | 140 | SaveDataType type, u64 title_id, u128 user_id, |
| 141 | u64 save_id) { | ||
| 140 | // According to switchbrew, if a save is of type SaveData and the title id field is 0, it should | 142 | // According to switchbrew, if a save is of type SaveData and the title id field is 0, it should |
| 141 | // be interpreted as the title id of the current process. | 143 | // be interpreted as the title id of the current process. |
| 142 | if (type == SaveDataType::SaveData || type == SaveDataType::DeviceSaveData) { | 144 | if (type == SaveDataType::SaveData || type == SaveDataType::DeviceSaveData) { |
| 143 | if (title_id == 0) { | 145 | if (title_id == 0) { |
| 144 | title_id = Core::System::GetInstance().CurrentProcess()->GetTitleID(); | 146 | title_id = system.CurrentProcess()->GetTitleID(); |
| 145 | } | 147 | } |
| 146 | } | 148 | } |
| 147 | 149 | ||
| @@ -167,7 +169,7 @@ std::string SaveDataFactory::GetFullPath(SaveDataSpaceId space, SaveDataType typ | |||
| 167 | 169 | ||
| 168 | SaveDataSize SaveDataFactory::ReadSaveDataSize(SaveDataType type, u64 title_id, | 170 | SaveDataSize SaveDataFactory::ReadSaveDataSize(SaveDataType type, u64 title_id, |
| 169 | u128 user_id) const { | 171 | u128 user_id) const { |
| 170 | const auto path = GetFullPath(SaveDataSpaceId::NandUser, type, title_id, user_id, 0); | 172 | const auto path = GetFullPath(system, SaveDataSpaceId::NandUser, type, title_id, user_id, 0); |
| 171 | const auto dir = GetOrCreateDirectoryRelative(this->dir, path); | 173 | const auto dir = GetOrCreateDirectoryRelative(this->dir, path); |
| 172 | 174 | ||
| 173 | const auto size_file = dir->GetFile(SAVE_DATA_SIZE_FILENAME); | 175 | const auto size_file = dir->GetFile(SAVE_DATA_SIZE_FILENAME); |
| @@ -182,7 +184,7 @@ SaveDataSize SaveDataFactory::ReadSaveDataSize(SaveDataType type, u64 title_id, | |||
| 182 | 184 | ||
| 183 | void SaveDataFactory::WriteSaveDataSize(SaveDataType type, u64 title_id, u128 user_id, | 185 | void SaveDataFactory::WriteSaveDataSize(SaveDataType type, u64 title_id, u128 user_id, |
| 184 | SaveDataSize new_value) const { | 186 | SaveDataSize new_value) const { |
| 185 | const auto path = GetFullPath(SaveDataSpaceId::NandUser, type, title_id, user_id, 0); | 187 | const auto path = GetFullPath(system, SaveDataSpaceId::NandUser, type, title_id, user_id, 0); |
| 186 | const auto dir = GetOrCreateDirectoryRelative(this->dir, path); | 188 | const auto dir = GetOrCreateDirectoryRelative(this->dir, path); |
| 187 | 189 | ||
| 188 | const auto size_file = dir->CreateFile(SAVE_DATA_SIZE_FILENAME); | 190 | const auto size_file = dir->CreateFile(SAVE_DATA_SIZE_FILENAME); |
diff --git a/src/core/file_sys/savedata_factory.h b/src/core/file_sys/savedata_factory.h index 6625bbbd8..17f774baa 100644 --- a/src/core/file_sys/savedata_factory.h +++ b/src/core/file_sys/savedata_factory.h | |||
| @@ -12,6 +12,10 @@ | |||
| 12 | #include "core/file_sys/vfs.h" | 12 | #include "core/file_sys/vfs.h" |
| 13 | #include "core/hle/result.h" | 13 | #include "core/hle/result.h" |
| 14 | 14 | ||
| 15 | namespace Core { | ||
| 16 | class System; | ||
| 17 | } | ||
| 18 | |||
| 15 | namespace FileSys { | 19 | namespace FileSys { |
| 16 | 20 | ||
| 17 | enum class SaveDataSpaceId : u8 { | 21 | enum class SaveDataSpaceId : u8 { |
| @@ -84,7 +88,7 @@ struct SaveDataSize { | |||
| 84 | /// File system interface to the SaveData archive | 88 | /// File system interface to the SaveData archive |
| 85 | class SaveDataFactory { | 89 | class SaveDataFactory { |
| 86 | public: | 90 | public: |
| 87 | explicit SaveDataFactory(VirtualDir dir); | 91 | explicit SaveDataFactory(Core::System& system_, VirtualDir save_directory_); |
| 88 | ~SaveDataFactory(); | 92 | ~SaveDataFactory(); |
| 89 | 93 | ||
| 90 | ResultVal<VirtualDir> Create(SaveDataSpaceId space, const SaveDataAttribute& meta) const; | 94 | ResultVal<VirtualDir> Create(SaveDataSpaceId space, const SaveDataAttribute& meta) const; |
| @@ -93,8 +97,8 @@ public: | |||
| 93 | VirtualDir GetSaveDataSpaceDirectory(SaveDataSpaceId space) const; | 97 | VirtualDir GetSaveDataSpaceDirectory(SaveDataSpaceId space) const; |
| 94 | 98 | ||
| 95 | static std::string GetSaveDataSpaceIdPath(SaveDataSpaceId space); | 99 | static std::string GetSaveDataSpaceIdPath(SaveDataSpaceId space); |
| 96 | static std::string GetFullPath(SaveDataSpaceId space, SaveDataType type, u64 title_id, | 100 | static std::string GetFullPath(Core::System& system, SaveDataSpaceId space, SaveDataType type, |
| 97 | u128 user_id, u64 save_id); | 101 | u64 title_id, u128 user_id, u64 save_id); |
| 98 | 102 | ||
| 99 | SaveDataSize ReadSaveDataSize(SaveDataType type, u64 title_id, u128 user_id) const; | 103 | SaveDataSize ReadSaveDataSize(SaveDataType type, u64 title_id, u128 user_id) const; |
| 100 | void WriteSaveDataSize(SaveDataType type, u64 title_id, u128 user_id, | 104 | void WriteSaveDataSize(SaveDataType type, u64 title_id, u128 user_id, |
| @@ -102,6 +106,7 @@ public: | |||
| 102 | 106 | ||
| 103 | private: | 107 | private: |
| 104 | VirtualDir dir; | 108 | VirtualDir dir; |
| 109 | Core::System& system; | ||
| 105 | }; | 110 | }; |
| 106 | 111 | ||
| 107 | } // namespace FileSys | 112 | } // namespace FileSys |
diff --git a/src/core/hle/service/filesystem/filesystem.cpp b/src/core/hle/service/filesystem/filesystem.cpp index af97561e4..ca93062cf 100644 --- a/src/core/hle/service/filesystem/filesystem.cpp +++ b/src/core/hle/service/filesystem/filesystem.cpp | |||
| @@ -717,7 +717,8 @@ void FileSystemController::CreateFactories(FileSys::VfsFilesystem& vfs, bool ove | |||
| 717 | } | 717 | } |
| 718 | 718 | ||
| 719 | if (save_data_factory == nullptr) { | 719 | if (save_data_factory == nullptr) { |
| 720 | save_data_factory = std::make_unique<FileSys::SaveDataFactory>(std::move(nand_directory)); | 720 | save_data_factory = |
| 721 | std::make_unique<FileSys::SaveDataFactory>(system, std::move(nand_directory)); | ||
| 721 | } | 722 | } |
| 722 | 723 | ||
| 723 | if (sdmc_factory == nullptr) { | 724 | if (sdmc_factory == nullptr) { |
diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp index 805619ccf..07fa85741 100644 --- a/src/yuzu/main.cpp +++ b/src/yuzu/main.cpp | |||
| @@ -1342,12 +1342,12 @@ void GMainWindow::OnGameListOpenFolder(u64 program_id, GameListOpenTarget target | |||
| 1342 | const auto user_id = manager.GetUser(static_cast<std::size_t>(index)); | 1342 | const auto user_id = manager.GetUser(static_cast<std::size_t>(index)); |
| 1343 | ASSERT(user_id); | 1343 | ASSERT(user_id); |
| 1344 | path = nand_dir + FileSys::SaveDataFactory::GetFullPath( | 1344 | path = nand_dir + FileSys::SaveDataFactory::GetFullPath( |
| 1345 | FileSys::SaveDataSpaceId::NandUser, | 1345 | system, FileSys::SaveDataSpaceId::NandUser, |
| 1346 | FileSys::SaveDataType::SaveData, program_id, user_id->uuid, 0); | 1346 | FileSys::SaveDataType::SaveData, program_id, user_id->uuid, 0); |
| 1347 | } else { | 1347 | } else { |
| 1348 | // Device save data | 1348 | // Device save data |
| 1349 | path = nand_dir + FileSys::SaveDataFactory::GetFullPath( | 1349 | path = nand_dir + FileSys::SaveDataFactory::GetFullPath( |
| 1350 | FileSys::SaveDataSpaceId::NandUser, | 1350 | system, FileSys::SaveDataSpaceId::NandUser, |
| 1351 | FileSys::SaveDataType::SaveData, program_id, {}, 0); | 1351 | FileSys::SaveDataType::SaveData, program_id, {}, 0); |
| 1352 | } | 1352 | } |
| 1353 | 1353 | ||