// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later #pragma once #include #include "common/common_types.h" #include "core/file_sys/vfs_types.h" #include "core/hle/result.h" namespace Loader { class AppLoader; } // namespace Loader namespace Service::FileSystem { class FileSystemController; } namespace FileSys { class ContentProvider; class NCA; enum class ContentRecordType : u8; enum class StorageId : u8 { None = 0, Host = 1, GameCard = 2, NandSystem = 3, NandUser = 4, SdCard = 5, }; /// File system interface to the RomFS archive class RomFSFactory { public: explicit RomFSFactory(Loader::AppLoader& app_loader, ContentProvider& provider, Service::FileSystem::FileSystemController& controller); ~RomFSFactory(); void SetPackedUpdate(VirtualFile update_raw_file); [[nodiscard]] VirtualFile OpenCurrentProcess(u64 current_process_title_id) const; [[nodiscard]] VirtualFile OpenPatchedRomFS(u64 title_id, ContentRecordType type) const; [[nodiscard]] VirtualFile OpenPatchedRomFSWithProgramIndex(u64 title_id, u8 program_index, ContentRecordType type) const; [[nodiscard]] VirtualFile Open(u64 title_id, StorageId storage, ContentRecordType type) const; private: [[nodiscard]] std::shared_ptr GetEntry(u64 title_id, StorageId storage, ContentRecordType type) const; VirtualFile file; VirtualFile update_raw; bool updatable; u64 ivfc_offset; ContentProvider& content_provider; Service::FileSystem::FileSystemController& filesystem_controller; }; } // namespace FileSys