diff options
Diffstat (limited to 'src/Ryujinx.Ui.Common/App/ApplicationData.cs')
| -rw-r--r-- | src/Ryujinx.Ui.Common/App/ApplicationData.cs | 158 |
1 files changed, 0 insertions, 158 deletions
diff --git a/src/Ryujinx.Ui.Common/App/ApplicationData.cs b/src/Ryujinx.Ui.Common/App/ApplicationData.cs deleted file mode 100644 index bd844805..00000000 --- a/src/Ryujinx.Ui.Common/App/ApplicationData.cs +++ /dev/null @@ -1,158 +0,0 @@ -using LibHac.Common; -using LibHac.Fs; -using LibHac.Fs.Fsa; -using LibHac.FsSystem; -using LibHac.Loader; -using LibHac.Ns; -using LibHac.Tools.Fs; -using LibHac.Tools.FsSystem; -using LibHac.Tools.FsSystem.NcaUtils; -using Ryujinx.Common.Logging; -using Ryujinx.HLE.FileSystem; -using Ryujinx.Ui.Common.Helper; -using System; -using System.IO; - -namespace Ryujinx.Ui.App.Common -{ - public class ApplicationData - { - public bool Favorite { get; set; } - public byte[] Icon { get; set; } - public string TitleName { get; set; } - public string TitleId { get; set; } - public string Developer { get; set; } - public string Version { get; set; } - public TimeSpan TimePlayed { get; set; } - public DateTime? LastPlayed { get; set; } - public string FileExtension { get; set; } - public long FileSize { get; set; } - public string Path { get; set; } - public BlitStruct<ApplicationControlProperty> ControlHolder { get; set; } - - public string TimePlayedString => ValueFormatUtils.FormatTimeSpan(TimePlayed); - - public string LastPlayedString => ValueFormatUtils.FormatDateTime(LastPlayed); - - public string FileSizeString => ValueFormatUtils.FormatFileSize(FileSize); - - public static string GetApplicationBuildId(VirtualFileSystem virtualFileSystem, string titleFilePath) - { - using FileStream file = new(titleFilePath, FileMode.Open, FileAccess.Read); - - Nca mainNca = null; - Nca patchNca = null; - - if (!System.IO.Path.Exists(titleFilePath)) - { - Logger.Error?.Print(LogClass.Application, $"File does not exists. {titleFilePath}"); - return string.Empty; - } - - string extension = System.IO.Path.GetExtension(titleFilePath).ToLower(); - - if (extension is ".nsp" or ".xci") - { - IFileSystem pfs; - - if (extension == ".xci") - { - Xci xci = new(virtualFileSystem.KeySet, file.AsStorage()); - - pfs = xci.OpenPartition(XciPartitionType.Secure); - } - else - { - var pfsTemp = new PartitionFileSystem(); - pfsTemp.Initialize(file.AsStorage()).ThrowIfFailure(); - pfs = pfsTemp; - } - - foreach (DirectoryEntryEx fileEntry in pfs.EnumerateEntries("/", "*.nca")) - { - using var ncaFile = new UniqueRef<IFile>(); - - pfs.OpenFile(ref ncaFile.Ref, fileEntry.FullPath.ToU8Span(), OpenMode.Read).ThrowIfFailure(); - - Nca nca = new(virtualFileSystem.KeySet, ncaFile.Get.AsStorage()); - - if (nca.Header.ContentType != NcaContentType.Program) - { - continue; - } - - int dataIndex = Nca.GetSectionIndexFromType(NcaSectionType.Data, NcaContentType.Program); - - if (nca.Header.GetFsHeader(dataIndex).IsPatchSection()) - { - patchNca = nca; - } - else - { - mainNca = nca; - } - } - } - else if (extension == ".nca") - { - mainNca = new Nca(virtualFileSystem.KeySet, file.AsStorage()); - } - - if (mainNca == null) - { - Logger.Error?.Print(LogClass.Application, "Extraction failure. The main NCA was not present in the selected file"); - - return string.Empty; - } - - (Nca updatePatchNca, _) = ApplicationLibrary.GetGameUpdateData(virtualFileSystem, mainNca.Header.TitleId.ToString("x16"), 0, out _); - - if (updatePatchNca != null) - { - patchNca = updatePatchNca; - } - - IFileSystem codeFs = null; - - if (patchNca == null) - { - if (mainNca.CanOpenSection(NcaSectionType.Code)) - { - codeFs = mainNca.OpenFileSystem(NcaSectionType.Code, IntegrityCheckLevel.ErrorOnInvalid); - } - } - else - { - if (patchNca.CanOpenSection(NcaSectionType.Code)) - { - codeFs = mainNca.OpenFileSystemWithPatch(patchNca, NcaSectionType.Code, IntegrityCheckLevel.ErrorOnInvalid); - } - } - - if (codeFs == null) - { - Logger.Error?.Print(LogClass.Loader, "No ExeFS found in NCA"); - - return string.Empty; - } - - const string MainExeFs = "main"; - - if (!codeFs.FileExists($"/{MainExeFs}")) - { - Logger.Error?.Print(LogClass.Loader, "No main binary ExeFS found in ExeFS"); - - return string.Empty; - } - - using var nsoFile = new UniqueRef<IFile>(); - - codeFs.OpenFile(ref nsoFile.Ref, $"/{MainExeFs}".ToU8Span(), OpenMode.Read).ThrowIfFailure(); - - NsoReader reader = new(); - reader.Initialize(nsoFile.Release().AsStorage().AsFile(OpenMode.Read)).ThrowIfFailure(); - - return BitConverter.ToString(reader.Header.ModuleId.ItemsRo.ToArray()).Replace("-", "").ToUpper()[..16]; - } - } -} |
