From e3b36db71c62a34a26b30683dd5ad5410c97cc9c Mon Sep 17 00:00:00 2001 From: Ac_K Date: Tue, 22 Mar 2022 20:46:16 +0100 Subject: [PATCH] hle: Some cleanup (#3210) * hle: Some cleanup This PR cleaned up a bit the HLE folder and the VirtualFileSystem one, since we use LibHac, we can use some class of it directly instead of duplicate things. The "Content" of VFS folder is removed since it should be handled in the NCM service directly. A larger cleanup should be done later since there is still be duplicated code here and there. * Fix Headless.SDL2 * Addresses gdkchan feedback --- Ryujinx.HLE/FileSystem/Content/ContentPath.cs | 19 ---- .../FileSystem/Content/LocationHelper.cs | 91 ------------------- Ryujinx.HLE/FileSystem/Content/StorageId.cs | 9 -- Ryujinx.HLE/FileSystem/Content/TitleType.cs | 15 --- .../{Content => }/ContentManager.cs | 19 ++-- Ryujinx.HLE/FileSystem/ContentPath.cs | 82 +++++++++++++++++ .../FileSystem/EncryptedFileSystemCreator.cs | 5 +- .../FileSystem/{Content => }/LocationEntry.cs | 2 +- Ryujinx.HLE/FileSystem/SaveDataType.cs | 12 --- Ryujinx.HLE/FileSystem/SaveInfo.cs | 27 ------ Ryujinx.HLE/FileSystem/SaveSpaceId.cs | 10 -- Ryujinx.HLE/FileSystem/StorageId.cs | 12 --- .../FileSystem/{Content => }/SystemVersion.cs | 3 +- Ryujinx.HLE/FileSystem/VirtualFileSystem.cs | 88 +++++++----------- Ryujinx.HLE/HLEConfiguration.cs | 1 - Ryujinx.HLE/HOS/Applets/Error/ErrorApplet.cs | 4 +- Ryujinx.HLE/HOS/Horizon.cs | 5 +- .../Services/Arp/ApplicationLaunchProperty.cs | 6 +- .../HOS/Services/Fs/IFileSystemProxy.cs | 2 - Ryujinx.HLE/HOS/Services/Hid/Hid.cs | 4 +- .../Ncm/Lr/ILocationResolverManager.cs | 2 +- .../ILocationResolver.cs | 2 +- .../Nim/IShopServiceAccessServerInterface.cs | 4 +- .../HOS/Services/Sdb/Pl/SharedFontManager.cs | 4 +- .../Settings/ISystemSettingsServer.cs | 4 +- .../HOS/Services/Spl/IGeneralInterface.cs | 3 +- .../Services/Ssl/BuiltInCertificateManager.cs | 4 +- .../Time/TimeZone/TimeZoneContentManager.cs | 4 +- Ryujinx.HLE/Switch.cs | 85 ++++++----------- Ryujinx.Headless.SDL2/Program.cs | 2 - Ryujinx/Ui/Helper/SetupValidator.cs | 2 +- Ryujinx/Ui/MainWindow.cs | 22 ++--- Ryujinx/Ui/Windows/AvatarWindow.cs | 4 +- Ryujinx/Ui/Windows/SettingsWindow.cs | 4 +- .../Ui/Windows/UserProfilesManagerWindow.cs | 3 +- 35 files changed, 192 insertions(+), 373 deletions(-) delete mode 100644 Ryujinx.HLE/FileSystem/Content/ContentPath.cs delete mode 100644 Ryujinx.HLE/FileSystem/Content/LocationHelper.cs delete mode 100644 Ryujinx.HLE/FileSystem/Content/StorageId.cs delete mode 100644 Ryujinx.HLE/FileSystem/Content/TitleType.cs rename Ryujinx.HLE/FileSystem/{Content => }/ContentManager.cs (98%) create mode 100644 Ryujinx.HLE/FileSystem/ContentPath.cs rename Ryujinx.HLE/FileSystem/{Content => }/LocationEntry.cs (94%) delete mode 100644 Ryujinx.HLE/FileSystem/SaveDataType.cs delete mode 100644 Ryujinx.HLE/FileSystem/SaveInfo.cs delete mode 100644 Ryujinx.HLE/FileSystem/SaveSpaceId.cs delete mode 100644 Ryujinx.HLE/FileSystem/StorageId.cs rename Ryujinx.HLE/FileSystem/{Content => }/SystemVersion.cs (95%) diff --git a/Ryujinx.HLE/FileSystem/Content/ContentPath.cs b/Ryujinx.HLE/FileSystem/Content/ContentPath.cs deleted file mode 100644 index 1e2c8ab32..000000000 --- a/Ryujinx.HLE/FileSystem/Content/ContentPath.cs +++ /dev/null @@ -1,19 +0,0 @@ -namespace Ryujinx.HLE.FileSystem.Content -{ - static class ContentPath - { - public const string SystemContent = "@SystemContent"; - public const string UserContent = "@UserContent"; - public const string SdCardContent = "@SdCardContent"; - public const string SdCard = "@SdCard"; - public const string CalibFile = "@CalibFile"; - public const string Safe = "@Safe"; - public const string User = "@User"; - public const string System = "@System"; - public const string Host = "@Host"; - public const string GamecardApp = "@GcApp"; - public const string GamecardContents = "@GcS00000001"; - public const string GamecardUpdate = "@upp"; - public const string RegisteredUpdate = "@RegUpdate"; - } -} \ No newline at end of file diff --git a/Ryujinx.HLE/FileSystem/Content/LocationHelper.cs b/Ryujinx.HLE/FileSystem/Content/LocationHelper.cs deleted file mode 100644 index c522b053b..000000000 --- a/Ryujinx.HLE/FileSystem/Content/LocationHelper.cs +++ /dev/null @@ -1,91 +0,0 @@ -using System; -using System.IO; - -using static Ryujinx.HLE.FileSystem.VirtualFileSystem; - -namespace Ryujinx.HLE.FileSystem.Content -{ - internal static class LocationHelper - { - public static string GetRealPath(VirtualFileSystem fileSystem, string switchContentPath) - { - string basePath = fileSystem.GetBasePath(); - - switch (switchContentPath) - { - case ContentPath.SystemContent: - return Path.Combine(basePath, SystemNandPath, "Contents"); - case ContentPath.UserContent: - return Path.Combine(basePath, UserNandPath, "Contents"); - case ContentPath.SdCardContent: - return Path.Combine(fileSystem.GetSdCardPath(), "Nintendo", "Contents"); - case ContentPath.System: - return Path.Combine(basePath, SystemNandPath); - case ContentPath.User: - return Path.Combine(basePath, UserNandPath); - default: - throw new NotSupportedException($"Content Path `{switchContentPath}` is not supported."); - } - } - - public static string GetContentPath(ContentStorageId contentStorageId) - { - switch (contentStorageId) - { - case ContentStorageId.NandSystem: - return ContentPath.SystemContent; - case ContentStorageId.NandUser: - return ContentPath.UserContent; - case ContentStorageId.SdCard: - return ContentPath.SdCardContent; - default: - throw new NotSupportedException($"Content Storage `{contentStorageId}` is not supported."); - } - } - - public static string GetContentRoot(StorageId storageId) - { - switch (storageId) - { - case StorageId.NandSystem: - return ContentPath.SystemContent; - case StorageId.NandUser: - return ContentPath.UserContent; - case StorageId.SdCard: - return ContentPath.SdCardContent; - default: - throw new NotSupportedException($"Storage Id `{storageId}` is not supported."); - } - } - - public static StorageId GetStorageId(string contentPathString) - { - string cleanedPath = contentPathString.Split(':')[0]; - - switch (cleanedPath) - { - case ContentPath.SystemContent: - case ContentPath.System: - return StorageId.NandSystem; - - case ContentPath.UserContent: - case ContentPath.User: - return StorageId.NandUser; - - case ContentPath.SdCardContent: - return StorageId.SdCard; - - case ContentPath.Host: - return StorageId.Host; - - case ContentPath.GamecardApp: - case ContentPath.GamecardContents: - case ContentPath.GamecardUpdate: - return StorageId.GameCard; - - default: - return StorageId.None; - } - } - } -} diff --git a/Ryujinx.HLE/FileSystem/Content/StorageId.cs b/Ryujinx.HLE/FileSystem/Content/StorageId.cs deleted file mode 100644 index 4ff3dd657..000000000 --- a/Ryujinx.HLE/FileSystem/Content/StorageId.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace Ryujinx.HLE.FileSystem.Content -{ - public enum ContentStorageId - { - NandSystem, - NandUser, - SdCard - } -} diff --git a/Ryujinx.HLE/FileSystem/Content/TitleType.cs b/Ryujinx.HLE/FileSystem/Content/TitleType.cs deleted file mode 100644 index 6ad26c9cd..000000000 --- a/Ryujinx.HLE/FileSystem/Content/TitleType.cs +++ /dev/null @@ -1,15 +0,0 @@ -namespace Ryujinx.HLE.FileSystem.Content -{ - enum TitleType - { - SystemPrograms = 0x01, - SystemDataArchive = 0x02, - SystemUpdate = 0x03, - FirmwarePackageA = 0x04, - FirmwarePackageB = 0x05, - RegularApplication = 0x80, - Update = 0x81, - AddOnContent = 0x82, - DeltaTitle = 0x83 - } -} diff --git a/Ryujinx.HLE/FileSystem/Content/ContentManager.cs b/Ryujinx.HLE/FileSystem/ContentManager.cs similarity index 98% rename from Ryujinx.HLE/FileSystem/Content/ContentManager.cs rename to Ryujinx.HLE/FileSystem/ContentManager.cs index 8ac31a4c5..2544cdda9 100644 --- a/Ryujinx.HLE/FileSystem/Content/ContentManager.cs +++ b/Ryujinx.HLE/FileSystem/ContentManager.cs @@ -20,7 +20,7 @@ using System.IO.Compression; using System.Linq; using Path = System.IO.Path; -namespace Ryujinx.HLE.FileSystem.Content +namespace Ryujinx.HLE.FileSystem { public class ContentManager { @@ -110,8 +110,8 @@ namespace Ryujinx.HLE.FileSystem.Content try { - contentPathString = LocationHelper.GetContentRoot(storageId); - contentDirectory = LocationHelper.GetRealPath(_virtualFileSystem, contentPathString); + contentPathString = ContentPath.GetContentPath(storageId); + contentDirectory = ContentPath.GetRealPath(_virtualFileSystem, contentPathString); registeredDirectory = Path.Combine(contentDirectory, "registered"); } catch (NotSupportedException) @@ -367,8 +367,7 @@ namespace Ryujinx.HLE.FileSystem.Content { LocationEntry locationEntry = GetLocation(titleId, contentType, storageId); - return locationEntry.ContentPath != null ? - LocationHelper.GetStorageId(locationEntry.ContentPath) : StorageId.None; + return locationEntry.ContentPath != null ? ContentPath.GetStorageId(locationEntry.ContentPath) : StorageId.None; } } @@ -493,8 +492,8 @@ namespace Ryujinx.HLE.FileSystem.Content public void InstallFirmware(string firmwareSource) { - string contentPathString = LocationHelper.GetContentRoot(StorageId.NandSystem); - string contentDirectory = LocationHelper.GetRealPath(_virtualFileSystem, contentPathString); + string contentPathString = ContentPath.GetContentPath(StorageId.BuiltInSystem); + string contentDirectory = ContentPath.GetRealPath(_virtualFileSystem, contentPathString); string registeredDirectory = Path.Combine(contentDirectory, "registered"); string temporaryDirectory = Path.Combine(contentDirectory, "temp"); @@ -998,9 +997,9 @@ namespace Ryujinx.HLE.FileSystem.Content foreach (var entry in updateNcas) { - foreach (var nca in entry.Value) + foreach (var (type, path) in entry.Value) { - extraNcas += nca.path + Environment.NewLine; + extraNcas += path + Environment.NewLine; } } @@ -1019,7 +1018,7 @@ namespace Ryujinx.HLE.FileSystem.Content lock (_lock) { - var locationEnties = _locationEntries[StorageId.NandSystem]; + var locationEnties = _locationEntries[StorageId.BuiltInSystem]; foreach (var entry in locationEnties) { diff --git a/Ryujinx.HLE/FileSystem/ContentPath.cs b/Ryujinx.HLE/FileSystem/ContentPath.cs new file mode 100644 index 000000000..c8663081a --- /dev/null +++ b/Ryujinx.HLE/FileSystem/ContentPath.cs @@ -0,0 +1,82 @@ +using LibHac.Fs; +using LibHac.Ncm; +using Ryujinx.Common.Configuration; +using System; + +using static Ryujinx.HLE.FileSystem.VirtualFileSystem; +using Path = System.IO.Path; + +namespace Ryujinx.HLE.FileSystem +{ + internal static class ContentPath + { + public const string SystemContent = "@SystemContent"; + public const string UserContent = "@UserContent"; + public const string SdCardContent = "@SdCardContent"; + public const string SdCard = "@Sdcard"; + public const string CalibFile = "@CalibFile"; + public const string Safe = "@Safe"; + public const string User = "@User"; + public const string System = "@System"; + public const string Host = "@Host"; + public const string GamecardApp = "@GcApp"; + public const string GamecardContents = "@GcS00000001"; + public const string GamecardUpdate = "@upp"; + public const string RegisteredUpdate = "@RegUpdate"; + + public const string Nintendo = "Nintendo"; + public const string Contents = "Contents"; + + public static string GetRealPath(VirtualFileSystem fileSystem, string switchContentPath) + { + return switchContentPath switch + { + SystemContent => Path.Combine(AppDataManager.BaseDirPath, SystemNandPath, Contents), + UserContent => Path.Combine(AppDataManager.BaseDirPath, UserNandPath, Contents), + SdCardContent => Path.Combine(fileSystem.GetSdCardPath(), Nintendo, Contents), + System => Path.Combine(AppDataManager.BaseDirPath, SystemNandPath), + User => Path.Combine(AppDataManager.BaseDirPath, UserNandPath), + _ => throw new NotSupportedException($"Content Path \"`{switchContentPath}`\" is not supported.") + }; + } + + public static string GetContentPath(ContentStorageId contentStorageId) + { + return contentStorageId switch + { + ContentStorageId.System => SystemContent, + ContentStorageId.User => UserContent, + ContentStorageId.SdCard => SdCardContent, + _ => throw new NotSupportedException($"Content Storage Id \"`{contentStorageId}`\" is not supported.") + }; + } + + public static string GetContentPath(StorageId storageId) + { + return storageId switch + { + StorageId.BuiltInSystem => SystemContent, + StorageId.BuiltInUser => UserContent, + StorageId.SdCard => SdCardContent, + _ => throw new NotSupportedException($"Storage Id \"`{storageId}`\" is not supported.") + }; + } + + public static StorageId GetStorageId(string contentPathString) + { + return contentPathString.Split(':')[0] switch + { + SystemContent or + System => StorageId.BuiltInSystem, + UserContent or + User => StorageId.BuiltInUser, + SdCardContent => StorageId.SdCard, + Host => StorageId.Host, + GamecardApp or + GamecardContents or + GamecardUpdate => StorageId.GameCard, + _ => StorageId.None + }; + } + } +} \ No newline at end of file diff --git a/Ryujinx.HLE/FileSystem/EncryptedFileSystemCreator.cs b/Ryujinx.HLE/FileSystem/EncryptedFileSystemCreator.cs index 60c3cfdb4..f32dc2d77 100644 --- a/Ryujinx.HLE/FileSystem/EncryptedFileSystemCreator.cs +++ b/Ryujinx.HLE/FileSystem/EncryptedFileSystemCreator.cs @@ -8,7 +8,6 @@ namespace Ryujinx.HLE.FileSystem { public class EncryptedFileSystemCreator : IEncryptedFileSystemCreator { - public Result Create(ref SharedRef outEncryptedFileSystem, ref SharedRef baseFileSystem, IEncryptedFileSystemCreator.KeyId idIndex, in EncryptionSeed encryptionSeed) @@ -18,10 +17,10 @@ namespace Ryujinx.HLE.FileSystem return ResultFs.InvalidArgument.Log(); } - // Todo: Reenable when AesXtsFileSystem is fixed + // TODO: Reenable when AesXtsFileSystem is fixed. outEncryptedFileSystem = SharedRef.CreateMove(ref baseFileSystem); return Result.Success; } } -} +} \ No newline at end of file diff --git a/Ryujinx.HLE/FileSystem/Content/LocationEntry.cs b/Ryujinx.HLE/FileSystem/LocationEntry.cs similarity index 94% rename from Ryujinx.HLE/FileSystem/Content/LocationEntry.cs rename to Ryujinx.HLE/FileSystem/LocationEntry.cs index bf938746d..45cbc8cd5 100644 --- a/Ryujinx.HLE/FileSystem/Content/LocationEntry.cs +++ b/Ryujinx.HLE/FileSystem/LocationEntry.cs @@ -1,6 +1,6 @@ using LibHac.FsSystem; -namespace Ryujinx.HLE.FileSystem.Content +namespace Ryujinx.HLE.FileSystem { public struct LocationEntry { diff --git a/Ryujinx.HLE/FileSystem/SaveDataType.cs b/Ryujinx.HLE/FileSystem/SaveDataType.cs deleted file mode 100644 index 2207fc23b..000000000 --- a/Ryujinx.HLE/FileSystem/SaveDataType.cs +++ /dev/null @@ -1,12 +0,0 @@ -namespace Ryujinx.HLE.FileSystem -{ - enum SaveDataType : byte - { - SystemSaveData, - SaveData, - BcatDeliveryCacheStorage, - DeviceSaveData, - TemporaryStorage, - CacheStorage - } -} \ No newline at end of file diff --git a/Ryujinx.HLE/FileSystem/SaveInfo.cs b/Ryujinx.HLE/FileSystem/SaveInfo.cs deleted file mode 100644 index 96f2f020e..000000000 --- a/Ryujinx.HLE/FileSystem/SaveInfo.cs +++ /dev/null @@ -1,27 +0,0 @@ -using Ryujinx.HLE.HOS.Services.Account.Acc; - -namespace Ryujinx.HLE.FileSystem -{ - struct SaveInfo - { - public ulong TitleId { get; private set; } - public long SaveId { get; private set; } - public SaveDataType SaveDataType { get; private set; } - public SaveSpaceId SaveSpaceId { get; private set; } - public UserId UserId { get; private set; } - - public SaveInfo( - ulong titleId, - long saveId, - SaveDataType saveDataType, - SaveSpaceId saveSpaceId, - UserId userId = new UserId()) - { - TitleId = titleId; - SaveId = saveId; - SaveDataType = saveDataType; - SaveSpaceId = saveSpaceId; - UserId = userId; - } - } -} \ No newline at end of file diff --git a/Ryujinx.HLE/FileSystem/SaveSpaceId.cs b/Ryujinx.HLE/FileSystem/SaveSpaceId.cs deleted file mode 100644 index d51922df1..000000000 --- a/Ryujinx.HLE/FileSystem/SaveSpaceId.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace Ryujinx.HLE.FileSystem -{ - enum SaveSpaceId - { - NandSystem, - NandUser, - SdCard, - TemporaryStorage - } -} diff --git a/Ryujinx.HLE/FileSystem/StorageId.cs b/Ryujinx.HLE/FileSystem/StorageId.cs deleted file mode 100644 index d4043e2c7..000000000 --- a/Ryujinx.HLE/FileSystem/StorageId.cs +++ /dev/null @@ -1,12 +0,0 @@ -namespace Ryujinx.HLE.FileSystem -{ - public enum StorageId - { - None, - Host, - GameCard, - NandSystem, - NandUser, - SdCard - } -} diff --git a/Ryujinx.HLE/FileSystem/Content/SystemVersion.cs b/Ryujinx.HLE/FileSystem/SystemVersion.cs similarity index 95% rename from Ryujinx.HLE/FileSystem/Content/SystemVersion.cs rename to Ryujinx.HLE/FileSystem/SystemVersion.cs index 3f19e135a..a7926d5d3 100644 --- a/Ryujinx.HLE/FileSystem/Content/SystemVersion.cs +++ b/Ryujinx.HLE/FileSystem/SystemVersion.cs @@ -1,8 +1,7 @@ using Ryujinx.HLE.Utilities; using System.IO; -using System.Text; -namespace Ryujinx.HLE.FileSystem.Content +namespace Ryujinx.HLE.FileSystem { public class SystemVersion { diff --git a/Ryujinx.HLE/FileSystem/VirtualFileSystem.cs b/Ryujinx.HLE/FileSystem/VirtualFileSystem.cs index 9359b03c7..001a1f5f5 100644 --- a/Ryujinx.HLE/FileSystem/VirtualFileSystem.cs +++ b/Ryujinx.HLE/FileSystem/VirtualFileSystem.cs @@ -13,7 +13,6 @@ using LibHac.Tools.Fs; using LibHac.Tools.FsSystem; using Ryujinx.Common.Configuration; using Ryujinx.Common.Logging; -using Ryujinx.HLE.FileSystem.Content; using Ryujinx.HLE.HOS; using System; using System.Buffers.Text; @@ -28,20 +27,29 @@ namespace Ryujinx.HLE.FileSystem { public class VirtualFileSystem : IDisposable { - public const string NandPath = AppDataManager.DefaultNandDir; - public const string SdCardPath = AppDataManager.DefaultSdcardDir; + public static string SafeNandPath = Path.Combine(AppDataManager.DefaultNandDir, "safe"); + public static string SystemNandPath = Path.Combine(AppDataManager.DefaultNandDir, "system"); + public static string UserNandPath = Path.Combine(AppDataManager.DefaultNandDir, "user"); - public static string SafeNandPath = Path.Combine(NandPath, "safe"); - public static string SystemNandPath = Path.Combine(NandPath, "system"); - public static string UserNandPath = Path.Combine(NandPath, "user"); + public KeySet KeySet { get; private set; } + public EmulatedGameCard GameCard { get; private set; } + public EmulatedSdCard SdCard { get; private set; } + public ModLoader ModLoader { get; private set; } + public Stream RomFs { get; private set; } private static bool _isInitialized = false; - public KeySet KeySet { get; private set; } - public EmulatedGameCard GameCard { get; private set; } - public EmulatedSdCard SdCard { get; private set; } + public static VirtualFileSystem CreateInstance() + { + if (_isInitialized) + { + throw new InvalidOperationException("VirtualFileSystem can only be instantiated once!"); + } - public ModLoader ModLoader { get; private set; } + _isInitialized = true; + + return new VirtualFileSystem(); + } private VirtualFileSystem() { @@ -49,8 +57,6 @@ namespace Ryujinx.HLE.FileSystem ModLoader = new ModLoader(); // Should only be created once } - public Stream RomFs { get; private set; } - public void LoadRomFs(string fileName) { RomFs = new FileStream(fileName, FileMode.Open, FileAccess.Read); @@ -79,7 +85,7 @@ namespace Ryujinx.HLE.FileSystem string fullPath = Path.GetFullPath(Path.Combine(basePath, fileName)); - if (!fullPath.StartsWith(GetBasePath())) + if (!fullPath.StartsWith(AppDataManager.BaseDirPath)) { return null; } @@ -87,14 +93,8 @@ namespace Ryujinx.HLE.FileSystem return fullPath; } - internal string GetBasePath() => AppDataManager.BaseDirPath; - internal string GetSdCardPath() => MakeFullPath(SdCardPath); - public string GetNandPath() => MakeFullPath(NandPath); - - public string GetFullPartitionPath(string partitionPath) - { - return MakeFullPath(partitionPath); - } + internal string GetSdCardPath() => MakeFullPath(AppDataManager.DefaultSdcardDir); + public string GetNandPath() => MakeFullPath(AppDataManager.DefaultNandDir); public string SwitchPathToSystemPath(string switchPath) { @@ -110,7 +110,7 @@ namespace Ryujinx.HLE.FileSystem public string SystemPathToSwitchPath(string systemPath) { - string baseSystemPath = GetBasePath() + Path.DirectorySeparatorChar; + string baseSystemPath = AppDataManager.BaseDirPath + Path.DirectorySeparatorChar; if (systemPath.StartsWith(baseSystemPath)) { @@ -136,8 +136,7 @@ namespace Ryujinx.HLE.FileSystem switch (path) { case ContentPath.SdCard: - case "@Sdcard": - path = SdCardPath; + path = AppDataManager.DefaultSdcardDir; break; case ContentPath.User: path = UserNandPath; @@ -146,7 +145,7 @@ namespace Ryujinx.HLE.FileSystem path = SystemNandPath; break; case ContentPath.SdCardContent: - path = Path.Combine(SdCardPath, "Nintendo", "Contents"); + path = Path.Combine(AppDataManager.DefaultSdcardDir, "Nintendo", "Contents"); break; case ContentPath.UserContent: path = Path.Combine(UserNandPath, "Contents"); @@ -156,27 +155,19 @@ namespace Ryujinx.HLE.FileSystem break; } - string fullPath = Path.Combine(GetBasePath(), path); + string fullPath = Path.Combine(AppDataManager.BaseDirPath, path); - if (isDirectory) + if (isDirectory && !Directory.Exists(fullPath)) { - if (!Directory.Exists(fullPath)) - { - Directory.CreateDirectory(fullPath); - } + Directory.CreateDirectory(fullPath); } return fullPath; } - public DriveInfo GetDrive() - { - return new DriveInfo(Path.GetPathRoot(GetBasePath())); - } - public void InitializeFsServer(LibHac.Horizon horizon, out HorizonClient fsServerClient) { - LocalFileSystem serverBaseFs = new LocalFileSystem(GetBasePath()); + LocalFileSystem serverBaseFs = new LocalFileSystem(AppDataManager.BaseDirPath); fsServerClient = horizon.CreatePrivilegedHorizonClient(); var fsServer = new FileSystemServer(fsServerClient); @@ -505,7 +496,7 @@ namespace Ryujinx.HLE.FileSystem bool canFixBySaveDataId = extraData.Attribute.StaticSaveDataId == 0 && info.StaticSaveDataId != 0; - bool hasEmptyOwnerId = extraData.OwnerId == 0 && info.Type != LibHac.Fs.SaveDataType.System; + bool hasEmptyOwnerId = extraData.OwnerId == 0 && info.Type != SaveDataType.System; if (!canFixByProgramId && !canFixBySaveDataId && !hasEmptyOwnerId) { @@ -523,7 +514,7 @@ namespace Ryujinx.HLE.FileSystem // The rest of the extra data can't be created from the save data info. // On user saves the owner ID will almost certainly be the same as the program ID. - if (info.Type != LibHac.Fs.SaveDataType.System) + if (info.Type != SaveDataType.System) { extraData.OwnerId = info.ProgramId.Value; } @@ -580,11 +571,6 @@ namespace Ryujinx.HLE.FileSystem } }; - public void Unload() - { - RomFs?.Dispose(); - } - public void Dispose() { Dispose(true); @@ -594,20 +580,8 @@ namespace Ryujinx.HLE.FileSystem { if (disposing) { - Unload(); + RomFs?.Dispose(); } } - - public static VirtualFileSystem CreateInstance() - { - if (_isInitialized) - { - throw new InvalidOperationException("VirtualFileSystem can only be instantiated once!"); - } - - _isInitialized = true; - - return new VirtualFileSystem(); - } } } \ No newline at end of file diff --git a/Ryujinx.HLE/HLEConfiguration.cs b/Ryujinx.HLE/HLEConfiguration.cs index 3da02296e..8fd02a962 100644 --- a/Ryujinx.HLE/HLEConfiguration.cs +++ b/Ryujinx.HLE/HLEConfiguration.cs @@ -3,7 +3,6 @@ using Ryujinx.Audio.Integration; using Ryujinx.Common.Configuration; using Ryujinx.Graphics.GAL; using Ryujinx.HLE.FileSystem; -using Ryujinx.HLE.FileSystem.Content; using Ryujinx.HLE.HOS; using Ryujinx.HLE.HOS.Services.Account.Acc; using Ryujinx.HLE.HOS.SystemState; diff --git a/Ryujinx.HLE/HOS/Applets/Error/ErrorApplet.cs b/Ryujinx.HLE/HOS/Applets/Error/ErrorApplet.cs index c0d99a773..6780f8026 100644 --- a/Ryujinx.HLE/HOS/Applets/Error/ErrorApplet.cs +++ b/Ryujinx.HLE/HOS/Applets/Error/ErrorApplet.cs @@ -2,10 +2,10 @@ using LibHac.Fs; using LibHac.Fs.Fsa; using LibHac.FsSystem; +using LibHac.Ncm; using LibHac.Tools.FsSystem; using LibHac.Tools.FsSystem.NcaUtils; using Ryujinx.Common.Logging; -using Ryujinx.HLE.FileSystem; using Ryujinx.HLE.HOS.Services.Am.AppletAE; using Ryujinx.HLE.HOS.SystemState; using System; @@ -106,7 +106,7 @@ namespace Ryujinx.HLE.HOS.Applets.Error private string GetMessageText(uint module, uint description, string key) { - string binaryTitleContentPath = _horizon.ContentManager.GetInstalledContentPath(ErrorMessageBinaryTitleId, StorageId.NandSystem, NcaContentType.Data); + string binaryTitleContentPath = _horizon.ContentManager.GetInstalledContentPath(ErrorMessageBinaryTitleId, StorageId.BuiltInSystem, NcaContentType.Data); using (LibHac.Fs.IStorage ncaFileStream = new LocalStorage(_horizon.Device.FileSystem.SwitchPathToSystemPath(binaryTitleContentPath), FileAccess.Read, FileMode.Open)) { diff --git a/Ryujinx.HLE/HOS/Horizon.cs b/Ryujinx.HLE/HOS/Horizon.cs index cadd43fff..24d04c122 100644 --- a/Ryujinx.HLE/HOS/Horizon.cs +++ b/Ryujinx.HLE/HOS/Horizon.cs @@ -10,7 +10,7 @@ using Ryujinx.Audio.Integration; using Ryujinx.Audio.Output; using Ryujinx.Audio.Renderer.Device; using Ryujinx.Audio.Renderer.Server; -using Ryujinx.HLE.FileSystem.Content; +using Ryujinx.HLE.FileSystem; using Ryujinx.HLE.HOS.Kernel; using Ryujinx.HLE.HOS.Kernel.Memory; using Ryujinx.HLE.HOS.Kernel.Process; @@ -238,6 +238,7 @@ namespace Ryujinx.HLE.HOS SurfaceFlinger = new SurfaceFlinger(device); InitializeAudioRenderer(); + InitializeServices(); } private void InitializeAudioRenderer() @@ -288,7 +289,7 @@ namespace Ryujinx.HLE.HOS AudioManager.Start(); } - public void InitializeServices() + private void InitializeServices() { SmServer = new ServerBase(KernelContext, "SmServer", () => new IUserInterface(KernelContext)); diff --git a/Ryujinx.HLE/HOS/Services/Arp/ApplicationLaunchProperty.cs b/Ryujinx.HLE/HOS/Services/Arp/ApplicationLaunchProperty.cs index 5e3961101..c985092b8 100644 --- a/Ryujinx.HLE/HOS/Services/Arp/ApplicationLaunchProperty.cs +++ b/Ryujinx.HLE/HOS/Services/Arp/ApplicationLaunchProperty.cs @@ -1,4 +1,4 @@ -using Ryujinx.HLE.FileSystem; +using LibHac.Ncm; namespace Ryujinx.HLE.HOS.Services.Arp { @@ -20,7 +20,7 @@ namespace Ryujinx.HLE.HOS.Services.Arp { TitleId = 0x00, Version = 0x00, - BaseGameStorageId = (byte)StorageId.NandSystem, + BaseGameStorageId = (byte)StorageId.BuiltInSystem, UpdateGameStorageId = (byte)StorageId.None }; } @@ -35,7 +35,7 @@ namespace Ryujinx.HLE.HOS.Services.Arp { TitleId = context.Device.Application.TitleId, Version = 0x00, - BaseGameStorageId = (byte)StorageId.NandSystem, + BaseGameStorageId = (byte)StorageId.BuiltInSystem, UpdateGameStorageId = (byte)StorageId.None }; } diff --git a/Ryujinx.HLE/HOS/Services/Fs/IFileSystemProxy.cs b/Ryujinx.HLE/HOS/Services/Fs/IFileSystemProxy.cs index 945783039..01e1aa34d 100644 --- a/Ryujinx.HLE/HOS/Services/Fs/IFileSystemProxy.cs +++ b/Ryujinx.HLE/HOS/Services/Fs/IFileSystemProxy.cs @@ -2,7 +2,6 @@ using LibHac; using LibHac.Common; using LibHac.Fs; using LibHac.Fs.Shim; -using LibHac.FsSrv; using LibHac.FsSrv.Impl; using LibHac.FsSystem; using LibHac.Ncm; @@ -19,7 +18,6 @@ using static Ryujinx.HLE.Utilities.StringUtils; using IFileSystem = LibHac.FsSrv.Sf.IFileSystem; using IStorage = LibHac.FsSrv.Sf.IStorage; using RightsId = LibHac.Fs.RightsId; -using StorageId = Ryujinx.HLE.FileSystem.StorageId; namespace Ryujinx.HLE.HOS.Services.Fs { diff --git a/Ryujinx.HLE/HOS/Services/Hid/Hid.cs b/Ryujinx.HLE/HOS/Services/Hid/Hid.cs index b8833e9e1..b1466c787 100644 --- a/Ryujinx.HLE/HOS/Services/Hid/Hid.cs +++ b/Ryujinx.HLE/HOS/Services/Hid/Hid.cs @@ -55,9 +55,11 @@ namespace Ryujinx.HLE.HOS.Services.Hid _storage = storage; SharedMemory = SharedMemory.Create(); + + InitDevices(); } - public void InitDevices() + private void InitDevices() { DebugPad = new DebugPadDevice(_device, true); Touchscreen = new TouchDevice(_device, true); diff --git a/Ryujinx.HLE/HOS/Services/Ncm/Lr/ILocationResolverManager.cs b/Ryujinx.HLE/HOS/Services/Ncm/Lr/ILocationResolverManager.cs index 9f0c61ddf..546c05679 100644 --- a/Ryujinx.HLE/HOS/Services/Ncm/Lr/ILocationResolverManager.cs +++ b/Ryujinx.HLE/HOS/Services/Ncm/Lr/ILocationResolverManager.cs @@ -1,4 +1,4 @@ -using Ryujinx.HLE.FileSystem; +using LibHac.Ncm; using Ryujinx.HLE.HOS.Services.Ncm.Lr.LocationResolverManager; namespace Ryujinx.HLE.HOS.Services.Ncm.Lr diff --git a/Ryujinx.HLE/HOS/Services/Ncm/Lr/LocationResolverManager/ILocationResolver.cs b/Ryujinx.HLE/HOS/Services/Ncm/Lr/LocationResolverManager/ILocationResolver.cs index 9928285da..0767b148f 100644 --- a/Ryujinx.HLE/HOS/Services/Ncm/Lr/LocationResolverManager/ILocationResolver.cs +++ b/Ryujinx.HLE/HOS/Services/Ncm/Lr/LocationResolverManager/ILocationResolver.cs @@ -1,6 +1,6 @@ using LibHac.FsSystem; +using LibHac.Ncm; using Ryujinx.HLE.FileSystem; -using Ryujinx.HLE.FileSystem.Content; using System.Text; using static Ryujinx.HLE.Utilities.StringUtils; diff --git a/Ryujinx.HLE/HOS/Services/Nim/IShopServiceAccessServerInterface.cs b/Ryujinx.HLE/HOS/Services/Nim/IShopServiceAccessServerInterface.cs index 14d1990bb..98f5f6a89 100644 --- a/Ryujinx.HLE/HOS/Services/Nim/IShopServiceAccessServerInterface.cs +++ b/Ryujinx.HLE/HOS/Services/Nim/IShopServiceAccessServerInterface.cs @@ -1,5 +1,5 @@ -using Ryujinx.Common.Logging; -using Ryujinx.HLE.FileSystem; +using LibHac.Ncm; +using Ryujinx.Common.Logging; using Ryujinx.HLE.HOS.Services.Arp; using Ryujinx.HLE.HOS.Services.Nim.ShopServiceAccessServerInterface; diff --git a/Ryujinx.HLE/HOS/Services/Sdb/Pl/SharedFontManager.cs b/Ryujinx.HLE/HOS/Services/Sdb/Pl/SharedFontManager.cs index 13ff1adce..f1ef6a2f0 100644 --- a/Ryujinx.HLE/HOS/Services/Sdb/Pl/SharedFontManager.cs +++ b/Ryujinx.HLE/HOS/Services/Sdb/Pl/SharedFontManager.cs @@ -2,11 +2,11 @@ using LibHac.Common; using LibHac.Fs; using LibHac.Fs.Fsa; using LibHac.FsSystem; +using LibHac.Ncm; using LibHac.Tools.FsSystem; using LibHac.Tools.FsSystem.NcaUtils; using Ryujinx.HLE.Exceptions; using Ryujinx.HLE.FileSystem; -using Ryujinx.HLE.FileSystem.Content; using Ryujinx.HLE.HOS.Kernel.Memory; using Ryujinx.HLE.HOS.Services.Sdb.Pl.Types; using System; @@ -63,7 +63,7 @@ namespace Ryujinx.HLE.HOS.Services.Sdb.Pl { if (contentManager.TryGetFontTitle(name, out ulong fontTitle) && contentManager.TryGetFontFilename(name, out string fontFilename)) { - string contentPath = contentManager.GetInstalledContentPath(fontTitle, StorageId.NandSystem, NcaContentType.Data); + string contentPath = contentManager.GetInstalledContentPath(fontTitle, StorageId.BuiltInSystem, NcaContentType.Data); string fontPath = _device.FileSystem.SwitchPathToSystemPath(contentPath); if (!string.IsNullOrWhiteSpace(fontPath)) diff --git a/Ryujinx.HLE/HOS/Services/Settings/ISystemSettingsServer.cs b/Ryujinx.HLE/HOS/Services/Settings/ISystemSettingsServer.cs index ef1a42bac..88888f34f 100644 --- a/Ryujinx.HLE/HOS/Services/Settings/ISystemSettingsServer.cs +++ b/Ryujinx.HLE/HOS/Services/Settings/ISystemSettingsServer.cs @@ -3,9 +3,9 @@ using LibHac.Common; using LibHac.Fs; using LibHac.Fs.Fsa; using LibHac.FsSystem; +using LibHac.Ncm; using LibHac.Tools.FsSystem.NcaUtils; using Ryujinx.Common.Logging; -using Ryujinx.HLE.FileSystem; using Ryujinx.HLE.HOS.SystemState; using Ryujinx.HLE.Utilities; using System; @@ -290,7 +290,7 @@ namespace Ryujinx.HLE.HOS.Services.Settings { const ulong SystemVersionTitleId = 0x0100000000000809; - string contentPath = device.System.ContentManager.GetInstalledContentPath(SystemVersionTitleId, StorageId.NandSystem, NcaContentType.Data); + string contentPath = device.System.ContentManager.GetInstalledContentPath(SystemVersionTitleId, StorageId.BuiltInSystem, NcaContentType.Data); if (string.IsNullOrWhiteSpace(contentPath)) { diff --git a/Ryujinx.HLE/HOS/Services/Spl/IGeneralInterface.cs b/Ryujinx.HLE/HOS/Services/Spl/IGeneralInterface.cs index 15625fc2e..53c9eb486 100644 --- a/Ryujinx.HLE/HOS/Services/Spl/IGeneralInterface.cs +++ b/Ryujinx.HLE/HOS/Services/Spl/IGeneralInterface.cs @@ -1,5 +1,4 @@ -using Ryujinx.Common.Logging; -using Ryujinx.HLE.FileSystem.Content; +using Ryujinx.HLE.FileSystem; using Ryujinx.HLE.HOS.Kernel.Common; using Ryujinx.HLE.HOS.Services.Spl.Types; diff --git a/Ryujinx.HLE/HOS/Services/Ssl/BuiltInCertificateManager.cs b/Ryujinx.HLE/HOS/Services/Ssl/BuiltInCertificateManager.cs index b585224d3..70691e1bd 100644 --- a/Ryujinx.HLE/HOS/Services/Ssl/BuiltInCertificateManager.cs +++ b/Ryujinx.HLE/HOS/Services/Ssl/BuiltInCertificateManager.cs @@ -3,13 +3,13 @@ using LibHac.Common; using LibHac.Fs; using LibHac.Fs.Fsa; using LibHac.FsSystem; +using LibHac.Ncm; using LibHac.Tools.FsSystem; using LibHac.Tools.FsSystem.NcaUtils; using Ryujinx.Common.Configuration; using Ryujinx.Common.Logging; using Ryujinx.HLE.Exceptions; using Ryujinx.HLE.FileSystem; -using Ryujinx.HLE.FileSystem.Content; using Ryujinx.HLE.HOS.Services.Ssl.Types; using System; using System.Collections.Generic; @@ -82,7 +82,7 @@ namespace Ryujinx.HLE.HOS.Services.Ssl public string GetCertStoreTitleContentPath() { - return _contentManager.GetInstalledContentPath(CertStoreTitleId, StorageId.NandSystem, NcaContentType.Data); + return _contentManager.GetInstalledContentPath(CertStoreTitleId, StorageId.BuiltInSystem, NcaContentType.Data); } public bool HasCertStoreTitle() diff --git a/Ryujinx.HLE/HOS/Services/Time/TimeZone/TimeZoneContentManager.cs b/Ryujinx.HLE/HOS/Services/Time/TimeZone/TimeZoneContentManager.cs index afcf976a1..8ff090260 100644 --- a/Ryujinx.HLE/HOS/Services/Time/TimeZone/TimeZoneContentManager.cs +++ b/Ryujinx.HLE/HOS/Services/Time/TimeZone/TimeZoneContentManager.cs @@ -3,12 +3,12 @@ using LibHac.Common; using LibHac.Fs; using LibHac.Fs.Fsa; using LibHac.FsSystem; +using LibHac.Ncm; using LibHac.Tools.FsSystem; using LibHac.Tools.FsSystem.NcaUtils; using Ryujinx.Common.Logging; using Ryujinx.HLE.Exceptions; using Ryujinx.HLE.FileSystem; -using Ryujinx.HLE.FileSystem.Content; using Ryujinx.HLE.HOS.Services.Time.Clock; using Ryujinx.HLE.Utilities; using System; @@ -241,7 +241,7 @@ namespace Ryujinx.HLE.HOS.Services.Time.TimeZone public string GetTimeZoneBinaryTitleContentPath() { - return _contentManager.GetInstalledContentPath(TimeZoneBinaryTitleId, StorageId.NandSystem, NcaContentType.Data); + return _contentManager.GetInstalledContentPath(TimeZoneBinaryTitleId, StorageId.BuiltInSystem, NcaContentType.Data); } public bool HasTimeZoneBinaryTitle() diff --git a/Ryujinx.HLE/Switch.cs b/Ryujinx.HLE/Switch.cs index 0dcbc7ec5..366a26f4a 100644 --- a/Ryujinx.HLE/Switch.cs +++ b/Ryujinx.HLE/Switch.cs @@ -13,27 +13,17 @@ namespace Ryujinx.HLE { public class Switch : IDisposable { - public HLEConfiguration Configuration { get; } - + public HLEConfiguration Configuration { get; } public IHardwareDeviceDriver AudioDeviceDriver { get; } - - internal MemoryBlock Memory { get; } - - public GpuContext Gpu { get; } - - public VirtualFileSystem FileSystem => Configuration.VirtualFileSystem; - - public Horizon System { get; } - - public ApplicationLoader Application { get; } - - public PerformanceStatistics Statistics { get; } - - public Hid Hid { get; } - - public TamperMachine TamperMachine { get; } - - public IHostUiHandler UiHandler { get; } + public MemoryBlock Memory { get; } + public GpuContext Gpu { get; } + public VirtualFileSystem FileSystem { get; } + public Horizon System { get; } + public ApplicationLoader Application { get; } + public PerformanceStatistics Statistics { get; } + public Hid Hid { get; } + public TamperMachine TamperMachine { get; } + public IHostUiHandler UiHandler { get; } public bool EnableDeviceVsync { get; set; } = true; @@ -55,47 +45,27 @@ namespace Ryujinx.HLE } Configuration = configuration; + FileSystem = Configuration.VirtualFileSystem; + UiHandler = Configuration.HostUiHandler; - UiHandler = configuration.HostUiHandler; + AudioDeviceDriver = new CompatLayerHardwareDeviceDriver(Configuration.AudioDeviceDriver); + Memory = new MemoryBlock(Configuration.MemoryConfiguration.ToDramSize(), MemoryAllocationFlags.Reserve); + Gpu = new GpuContext(Configuration.GpuRenderer); + System = new Horizon(this); + Statistics = new PerformanceStatistics(); + Hid = new Hid(this, System.HidStorage); + Application = new ApplicationLoader(this); + TamperMachine = new TamperMachine(); - AudioDeviceDriver = new CompatLayerHardwareDeviceDriver(configuration.AudioDeviceDriver); - - Memory = new MemoryBlock(configuration.MemoryConfiguration.ToDramSize(), MemoryAllocationFlags.Reserve); - - Gpu = new GpuContext(configuration.GpuRenderer); - - System = new Horizon(this); - System.InitializeServices(); - - Statistics = new PerformanceStatistics(); - - Hid = new Hid(this, System.HidStorage); - Hid.InitDevices(); - - Application = new ApplicationLoader(this); - - TamperMachine = new TamperMachine(); - - Initialize(); - } - - private void Initialize() - { System.State.SetLanguage(Configuration.SystemLanguage); - System.State.SetRegion(Configuration.Region); - EnableDeviceVsync = Configuration.EnableVsync; - - System.State.DockedMode = Configuration.EnableDockedMode; - + EnableDeviceVsync = Configuration.EnableVsync; + System.State.DockedMode = Configuration.EnableDockedMode; System.PerformanceState.PerformanceMode = System.State.DockedMode ? PerformanceMode.Boost : PerformanceMode.Default; - - System.EnablePtc = Configuration.EnablePtc; - - System.FsIntegrityCheckLevel = Configuration.FsIntegrityCheckLevel; - - System.GlobalAccessLogMode = Configuration.FsGlobalAccessLogMode; + System.EnablePtc = Configuration.EnablePtc; + System.FsIntegrityCheckLevel = Configuration.FsIntegrityCheckLevel; + System.GlobalAccessLogMode = Configuration.FsGlobalAccessLogMode; } public void LoadCart(string exeFsDir, string romFsFile = null) @@ -132,7 +102,6 @@ namespace Ryujinx.HLE { Gpu.ProcessShaderCacheQueue(); Gpu.Renderer.PreFrame(); - Gpu.GPFifo.DispatchCalls(); } @@ -182,9 +151,9 @@ namespace Ryujinx.HLE { System.Dispose(); AudioDeviceDriver.Dispose(); - FileSystem.Unload(); + FileSystem.Dispose(); Memory.Dispose(); } } } -} +} \ No newline at end of file diff --git a/Ryujinx.Headless.SDL2/Program.cs b/Ryujinx.Headless.SDL2/Program.cs index 5915a8817..1d64a8c6c 100644 --- a/Ryujinx.Headless.SDL2/Program.cs +++ b/Ryujinx.Headless.SDL2/Program.cs @@ -20,7 +20,6 @@ using Ryujinx.Graphics.OpenGL; using Ryujinx.Headless.SDL2.OpenGL; using Ryujinx.HLE; using Ryujinx.HLE.FileSystem; -using Ryujinx.HLE.FileSystem.Content; using Ryujinx.HLE.HOS; using Ryujinx.HLE.HOS.Services.Account.Acc; using Ryujinx.Input; @@ -29,7 +28,6 @@ using Ryujinx.Input.SDL2; using System; using System.Collections.Generic; using System.IO; -using System.Reflection; using System.Text.Json; using System.Threading; diff --git a/Ryujinx/Ui/Helper/SetupValidator.cs b/Ryujinx/Ui/Helper/SetupValidator.cs index 45315f8fb..8be8497be 100644 --- a/Ryujinx/Ui/Helper/SetupValidator.cs +++ b/Ryujinx/Ui/Helper/SetupValidator.cs @@ -1,5 +1,5 @@ using Ryujinx.Common.Logging; -using Ryujinx.HLE.FileSystem.Content; +using Ryujinx.HLE.FileSystem; using Ryujinx.Ui.Widgets; using System; using System.IO; diff --git a/Ryujinx/Ui/MainWindow.cs b/Ryujinx/Ui/MainWindow.cs index 32e66ee4e..54e28765a 100644 --- a/Ryujinx/Ui/MainWindow.cs +++ b/Ryujinx/Ui/MainWindow.cs @@ -1,18 +1,10 @@ -using System; -using System.Diagnostics; -using System.IO; -using System.Reflection; -using System.Threading; -using System.Threading.Tasks; - -using ARMeilleure.Translation; +using ARMeilleure.Translation; using ARMeilleure.Translation.PTC; - using Gtk; - using LibHac.Common; using LibHac.Common.Keys; using LibHac.FsSystem; +using LibHac.Ncm; using LibHac.Ns; using LibHac.Tools.FsSystem; using Ryujinx.Audio.Backends.Dummy; @@ -29,7 +21,6 @@ using Ryujinx.Graphics.GAL; using Ryujinx.Graphics.GAL.Multithreading; using Ryujinx.Graphics.OpenGL; using Ryujinx.HLE.FileSystem; -using Ryujinx.HLE.FileSystem.Content; using Ryujinx.HLE.HOS; using Ryujinx.HLE.HOS.Services.Account.Acc; using Ryujinx.HLE.HOS.SystemState; @@ -42,9 +33,14 @@ using Ryujinx.Ui.Applet; using Ryujinx.Ui.Helper; using Ryujinx.Ui.Widgets; using Ryujinx.Ui.Windows; +using System; +using System.Diagnostics; +using System.IO; +using System.Reflection; +using System.Threading; +using System.Threading.Tasks; using GUI = Gtk.Builder.ObjectAttribute; - using PtcLoadingState = ARMeilleure.Translation.PTC.PtcLoadingState; using ShaderCacheLoadingState = Ryujinx.Graphics.Gpu.Shader.ShaderCacheState; @@ -1283,7 +1279,7 @@ namespace Ryujinx.Ui private void Load_Mii_Edit_Applet(object sender, EventArgs args) { - string contentPath = _contentManager.GetInstalledContentPath(0x0100000000001009, StorageId.NandSystem, NcaContentType.Program); + string contentPath = _contentManager.GetInstalledContentPath(0x0100000000001009, StorageId.BuiltInSystem, NcaContentType.Program); LoadApplication(contentPath); } diff --git a/Ryujinx/Ui/Windows/AvatarWindow.cs b/Ryujinx/Ui/Windows/AvatarWindow.cs index 687b3d174..a5c07aed6 100644 --- a/Ryujinx/Ui/Windows/AvatarWindow.cs +++ b/Ryujinx/Ui/Windows/AvatarWindow.cs @@ -3,10 +3,10 @@ using LibHac.Common; using LibHac.Fs; using LibHac.Fs.Fsa; using LibHac.FsSystem; +using LibHac.Ncm; using LibHac.Tools.FsSystem; using LibHac.Tools.FsSystem.NcaUtils; using Ryujinx.HLE.FileSystem; -using Ryujinx.HLE.FileSystem.Content; using SixLabors.ImageSharp; using SixLabors.ImageSharp.Formats.Png; using SixLabors.ImageSharp.PixelFormats; @@ -115,7 +115,7 @@ namespace Ryujinx.Ui.Windows return; } - string contentPath = contentManager.GetInstalledContentPath(0x010000000000080A, StorageId.NandSystem, NcaContentType.Data); + string contentPath = contentManager.GetInstalledContentPath(0x010000000000080A, StorageId.BuiltInSystem, NcaContentType.Data); string avatarPath = virtualFileSystem.SwitchPathToSystemPath(contentPath); if (!string.IsNullOrWhiteSpace(avatarPath)) diff --git a/Ryujinx/Ui/Windows/SettingsWindow.cs b/Ryujinx/Ui/Windows/SettingsWindow.cs index 2b423081e..f0e937301 100644 --- a/Ryujinx/Ui/Windows/SettingsWindow.cs +++ b/Ryujinx/Ui/Windows/SettingsWindow.cs @@ -105,9 +105,9 @@ namespace Ryujinx.Ui.Windows #pragma warning restore CS0649, IDE0044 - public SettingsWindow(MainWindow parent, VirtualFileSystem virtualFileSystem, HLE.FileSystem.Content.ContentManager contentManager) : this(parent, new Builder("Ryujinx.Ui.Windows.SettingsWindow.glade"), virtualFileSystem, contentManager) { } + public SettingsWindow(MainWindow parent, VirtualFileSystem virtualFileSystem, ContentManager contentManager) : this(parent, new Builder("Ryujinx.Ui.Windows.SettingsWindow.glade"), virtualFileSystem, contentManager) { } - private SettingsWindow(MainWindow parent, Builder builder, VirtualFileSystem virtualFileSystem, HLE.FileSystem.Content.ContentManager contentManager) : base(builder.GetObject("_settingsWin").Handle) + private SettingsWindow(MainWindow parent, Builder builder, VirtualFileSystem virtualFileSystem, ContentManager contentManager) : base(builder.GetObject("_settingsWin").Handle) { Icon = new Gdk.Pixbuf(Assembly.GetExecutingAssembly(), "Ryujinx.Ui.Resources.Logo_Ryujinx.png"); diff --git a/Ryujinx/Ui/Windows/UserProfilesManagerWindow.cs b/Ryujinx/Ui/Windows/UserProfilesManagerWindow.cs index b26e7e201..862d5f15c 100644 --- a/Ryujinx/Ui/Windows/UserProfilesManagerWindow.cs +++ b/Ryujinx/Ui/Windows/UserProfilesManagerWindow.cs @@ -1,6 +1,5 @@ using Gtk; using Ryujinx.HLE.FileSystem; -using Ryujinx.HLE.FileSystem.Content; using Ryujinx.HLE.HOS.Services.Account.Acc; using Ryujinx.Ui.Widgets; using SixLabors.ImageSharp; @@ -12,7 +11,7 @@ using System.Reflection; using System.Threading; using System.Threading.Tasks; -using Image = SixLabors.ImageSharp.Image; +using Image = SixLabors.ImageSharp.Image; using UserId = Ryujinx.HLE.HOS.Services.Account.Acc.UserId; namespace Ryujinx.Ui.Windows