From aa01f70f469a7c0c559689e958e73125dad147b9 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Wed, 29 Jan 2025 17:56:43 -0600 Subject: [PATCH 1/3] =?UTF-8?q?UI:=20Pretty=20Atmosph=C3=A8re=20mod=20name?= =?UTF-8?q?s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Ryujinx/UI/Models/ModModel.cs | 7 ++++++- src/Ryujinx/UI/Windows/ModManagerWindow.axaml | 2 +- .../Utilities/AppLibrary/ApplicationLibrary.cs | 13 +++++++++++++ 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/Ryujinx/UI/Models/ModModel.cs b/src/Ryujinx/UI/Models/ModModel.cs index ee28ca5f52..a713f8e36a 100644 --- a/src/Ryujinx/UI/Models/ModModel.cs +++ b/src/Ryujinx/UI/Models/ModModel.cs @@ -1,5 +1,5 @@ using Ryujinx.Ava.UI.ViewModels; -using System.IO; +using System.Globalization; namespace Ryujinx.Ava.UI.Models { @@ -21,6 +21,11 @@ public bool Enabled public string Path { get; } public string Name { get; } + public string FormattedName => + InSd && ulong.TryParse(Name, NumberStyles.HexNumber, null, out ulong applicationId) + ? $"Atmosphère: {System.IO.Path.GetFileNameWithoutExtension(RyujinxApp.MainWindow.ApplicationLibrary.GetNameForApplicationId(applicationId))}" + : Name; + public ModModel(string path, string name, bool enabled, bool inSd) { Path = path; diff --git a/src/Ryujinx/UI/Windows/ModManagerWindow.axaml b/src/Ryujinx/UI/Windows/ModManagerWindow.axaml index a8fd3a2e72..b50ea2c8e8 100644 --- a/src/Ryujinx/UI/Windows/ModManagerWindow.axaml +++ b/src/Ryujinx/UI/Windows/ModManagerWindow.axaml @@ -81,7 +81,7 @@ MaxLines="2" TextWrapping="Wrap" TextTrimming="CharacterEllipsis" - Text="{Binding Name}" /> + Text="{Binding FormattedName}" /> appData = Applications.Lookup(id); + if (appData.HasValue) + return appData.Value.Name; + + Gommon.Optional dlcData = DownloadableContents.Keys.FindFirst(x => x.TitleId == id); + if (dlcData.HasValue) + return dlcData.Value.FileName; + + return id.ToString("X16"); + } + /// The configured key set is missing a key. /// The NCA header could not be decrypted. /// The NCA version is not supported. From 52338db1e8ee6c8815509454d5a28826d356c65f Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Wed, 29 Jan 2025 18:09:10 -0600 Subject: [PATCH 2/3] docs on the new ApplicationLibrary method --- .../Utilities/AppLibrary/ApplicationLibrary.cs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs b/src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs index 79388958ad..272bf7f72c 100644 --- a/src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs +++ b/src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs @@ -111,6 +111,18 @@ private ApplicationData GetApplicationFromExeFs(PartitionFileSystem pfs, string return data; } + /// + /// Gets a name for an available content file based on the Application ID ''. + ///

+ /// For Applications, this returns the localized name of the app found in the file. + /// For DLCs, this returns the name of the file that contains the DLC, minus the file extension. + ///
+ /// The Application ID to search for. + /// + /// If the provided Application ID does not have a corresponding Application OR DLC file, + /// formatted as hexadecimal is returned. + /// + /// A formatted Application name, or as hexadecimal if none is found. public string GetNameForApplicationId(ulong id) { DynamicData.Kernel.Optional appData = Applications.Lookup(id); From d64bf7d93c7890c79a46a3a509cfe4308097d96a Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Wed, 29 Jan 2025 18:15:15 -0600 Subject: [PATCH 3/3] small simplification --- src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs b/src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs index 272bf7f72c..e08d22372d 100644 --- a/src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs +++ b/src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs @@ -128,10 +128,9 @@ public string GetNameForApplicationId(ulong id) DynamicData.Kernel.Optional appData = Applications.Lookup(id); if (appData.HasValue) return appData.Value.Name; - - Gommon.Optional dlcData = DownloadableContents.Keys.FindFirst(x => x.TitleId == id); - if (dlcData.HasValue) - return dlcData.Value.FileName; + + if (DownloadableContents.Keys.FindFirst(x => x.TitleId == id).TryGet(out DownloadableContentModel dlcData)) + return dlcData.FileName; return id.ToString("X16"); }