early-access version 4088

This commit is contained in:
pineappleEA
2024-01-26 01:18:56 +01:00
parent 06b2c0cf0c
commit ef251c7289
160 changed files with 7677 additions and 839 deletions
+36 -28
View File
@@ -9,7 +9,7 @@
#include "core/core.h"
#include "core/file_sys/common_funcs.h"
#include "core/file_sys/content_archive.h"
#include "core/file_sys/mode.h"
#include "core/file_sys/fs_filesystem.h"
#include "core/file_sys/nca_metadata.h"
#include "core/file_sys/patch_manager.h"
#include "core/file_sys/registered_cache.h"
@@ -47,14 +47,14 @@ inline bool RemoveDLC(const Service::FileSystem::FileSystemController& fs_contro
/**
* \brief Removes all DLC for a game
* \param system Raw pointer to the system instance
* \param system Reference to the system instance
* \param program_id Program ID for the game that will have all of its DLC removed
* \return Number of DLC removed
*/
inline size_t RemoveAllDLC(Core::System* system, const u64 program_id) {
inline size_t RemoveAllDLC(Core::System& system, const u64 program_id) {
size_t count{};
const auto& fs_controller = system->GetFileSystemController();
const auto dlc_entries = system->GetContentProvider().ListEntriesFilter(
const auto& fs_controller = system.GetFileSystemController();
const auto dlc_entries = system.GetContentProvider().ListEntriesFilter(
FileSys::TitleType::AOC, FileSys::ContentRecordType::Data);
std::vector<u64> program_dlc_entries;
@@ -124,15 +124,15 @@ inline bool RemoveMod(const Service::FileSystem::FileSystemController& fs_contro
/**
* \brief Installs an NSP
* \param system Raw pointer to the system instance
* \param vfs Raw pointer to the VfsFilesystem instance in Core::System
* \param system Reference to the system instance
* \param vfs Reference to the VfsFilesystem instance in Core::System
* \param filename Path to the NSP file
* \param callback Callback to report the progress of the installation. The first size_t
* parameter is the total size of the virtual file and the second is the current progress. If you
* return true to the callback, it will cancel the installation as soon as possible.
* \return [InstallResult] representing how the installation finished
*/
inline InstallResult InstallNSP(Core::System* system, FileSys::VfsFilesystem* vfs,
inline InstallResult InstallNSP(Core::System& system, FileSys::VfsFilesystem& vfs,
const std::string& filename,
const std::function<bool(size_t, size_t)>& callback) {
const auto copy = [callback](const FileSys::VirtualFile& src, const FileSys::VirtualFile& dest,
@@ -159,7 +159,7 @@ inline InstallResult InstallNSP(Core::System* system, FileSys::VfsFilesystem* vf
};
std::shared_ptr<FileSys::NSP> nsp;
FileSys::VirtualFile file = vfs->OpenFile(filename, FileSys::Mode::Read);
FileSys::VirtualFile file = vfs.OpenFile(filename, FileSys::OpenMode::Read);
if (boost::to_lower_copy(file->GetName()).ends_with(std::string("nsp"))) {
nsp = std::make_shared<FileSys::NSP>(file);
if (nsp->IsExtractedType()) {
@@ -173,7 +173,7 @@ inline InstallResult InstallNSP(Core::System* system, FileSys::VfsFilesystem* vf
return InstallResult::Failure;
}
const auto res =
system->GetFileSystemController().GetUserNANDContents()->InstallEntry(*nsp, true, copy);
system.GetFileSystemController().GetUserNANDContents()->InstallEntry(*nsp, true, copy);
switch (res) {
case FileSys::InstallResult::Success:
return InstallResult::Success;
@@ -188,17 +188,17 @@ inline InstallResult InstallNSP(Core::System* system, FileSys::VfsFilesystem* vf
/**
* \brief Installs an NCA
* \param vfs Raw pointer to the VfsFilesystem instance in Core::System
* \param vfs Reference to the VfsFilesystem instance in Core::System
* \param filename Path to the NCA file
* \param registered_cache Raw pointer to the registered cache that the NCA will be installed to
* \param registered_cache Reference to the registered cache that the NCA will be installed to
* \param title_type Type of NCA package to install
* \param callback Callback to report the progress of the installation. The first size_t
* parameter is the total size of the virtual file and the second is the current progress. If you
* return true to the callback, it will cancel the installation as soon as possible.
* \return [InstallResult] representing how the installation finished
*/
inline InstallResult InstallNCA(FileSys::VfsFilesystem* vfs, const std::string& filename,
FileSys::RegisteredCache* registered_cache,
inline InstallResult InstallNCA(FileSys::VfsFilesystem& vfs, const std::string& filename,
FileSys::RegisteredCache& registered_cache,
const FileSys::TitleType title_type,
const std::function<bool(size_t, size_t)>& callback) {
const auto copy = [callback](const FileSys::VirtualFile& src, const FileSys::VirtualFile& dest,
@@ -224,7 +224,8 @@ inline InstallResult InstallNCA(FileSys::VfsFilesystem* vfs, const std::string&
return true;
};
const auto nca = std::make_shared<FileSys::NCA>(vfs->OpenFile(filename, FileSys::Mode::Read));
const auto nca =
std::make_shared<FileSys::NCA>(vfs.OpenFile(filename, FileSys::OpenMode::Read));
const auto id = nca->GetStatus();
// Game updates necessary are missing base RomFS
@@ -233,7 +234,7 @@ inline InstallResult InstallNCA(FileSys::VfsFilesystem* vfs, const std::string&
return InstallResult::Failure;
}
const auto res = registered_cache->InstallEntry(*nca, title_type, true, copy);
const auto res = registered_cache.InstallEntry(*nca, title_type, true, copy);
if (res == FileSys::InstallResult::Success) {
return InstallResult::Success;
} else if (res == FileSys::InstallResult::OverwriteExisting) {
@@ -245,19 +246,19 @@ inline InstallResult InstallNCA(FileSys::VfsFilesystem* vfs, const std::string&
/**
* \brief Verifies the installed contents for a given ManualContentProvider
* \param system Raw pointer to the system instance
* \param provider Raw pointer to the content provider that's tracking indexed games
* \param system Reference to the system instance
* \param provider Reference to the content provider that's tracking indexed games
* \param callback Callback to report the progress of the installation. The first size_t
* parameter is the total size of the installed contents and the second is the current progress. If
* you return true to the callback, it will cancel the installation as soon as possible.
* \return A list of entries that failed to install. Returns an empty vector if successful.
*/
inline std::vector<std::string> VerifyInstalledContents(
Core::System* system, FileSys::ManualContentProvider* provider,
Core::System& system, FileSys::ManualContentProvider& provider,
const std::function<bool(size_t, size_t)>& callback) {
// Get content registries.
auto bis_contents = system->GetFileSystemController().GetSystemNANDContents();
auto user_contents = system->GetFileSystemController().GetUserNANDContents();
auto bis_contents = system.GetFileSystemController().GetSystemNANDContents();
auto user_contents = system.GetFileSystemController().GetUserNANDContents();
std::vector<FileSys::RegisteredCache*> content_providers;
if (bis_contents) {
@@ -309,11 +310,11 @@ inline std::vector<std::string> VerifyInstalledContents(
const auto title_id = nca.GetTitleId();
std::string title_name = "unknown";
const auto control = provider->GetEntry(FileSys::GetBaseTitleID(title_id),
FileSys::ContentRecordType::Control);
const auto control = provider.GetEntry(FileSys::GetBaseTitleID(title_id),
FileSys::ContentRecordType::Control);
if (control && control->GetStatus() == Loader::ResultStatus::Success) {
const FileSys::PatchManager pm{title_id, system->GetFileSystemController(),
*provider};
const FileSys::PatchManager pm{title_id, system.GetFileSystemController(),
provider};
const auto [nacp, logo] = pm.ParseControlNCA(*control);
if (nacp) {
title_name = nacp->GetApplicationName();
@@ -335,7 +336,7 @@ inline std::vector<std::string> VerifyInstalledContents(
/**
* \brief Verifies the contents of a given game
* \param system Raw pointer to the system instance
* \param system Reference to the system instance
* \param game_path Patch to the game file
* \param callback Callback to report the progress of the installation. The first size_t
* parameter is the total size of the installed contents and the second is the current progress. If
@@ -343,10 +344,10 @@ inline std::vector<std::string> VerifyInstalledContents(
* \return GameVerificationResult representing how the verification process finished
*/
inline GameVerificationResult VerifyGameContents(
Core::System* system, const std::string& game_path,
Core::System& system, const std::string& game_path,
const std::function<bool(size_t, size_t)>& callback) {
const auto loader = Loader::GetLoader(
*system, system->GetFilesystem()->OpenFile(game_path, FileSys::Mode::Read));
system, system.GetFilesystem()->OpenFile(game_path, FileSys::OpenMode::Read));
if (loader == nullptr) {
return GameVerificationResult::NotImplemented;
}
@@ -368,4 +369,11 @@ inline GameVerificationResult VerifyGameContents(
return GameVerificationResult::Success;
}
/**
* Checks if the keys required for decrypting firmware and games are available
*/
inline bool AreKeysPresent() {
return !Core::Crypto::KeyManager::Instance().BaseDeriveNecessary();
}
} // namespace ContentManager