mirror of
				https://github.com/ryujinx-mirror/ryujinx.git
				synced 2025-11-04 08:59:04 -06:00 
			
		
		
		
	Fix checking for the wrong metadata files for applications launched with a different program index (#7055)
* Fix checking for the wrong update metadata file * Apply the same fix for dlc.json * Use the base application ids for updates and DLCs in the GUI too This shouldn't actually change anything, since the program index part of the application id should always be 0 for all applications currently seen by the GUI. This was just done for completeness.
This commit is contained in:
		@@ -473,7 +473,7 @@ namespace Ryujinx.UI.Widgets
 | 
			
		||||
 | 
			
		||||
        private void ManageDlc_Clicked(object sender, EventArgs args)
 | 
			
		||||
        {
 | 
			
		||||
            new DlcWindow(_virtualFileSystem, _applicationData.IdString, _applicationData).Show();
 | 
			
		||||
            new DlcWindow(_virtualFileSystem, _applicationData.IdBaseString, _applicationData).Show();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void ManageCheats_Clicked(object sender, EventArgs args)
 | 
			
		||||
 
 | 
			
		||||
@@ -24,7 +24,7 @@ namespace Ryujinx.UI.Windows
 | 
			
		||||
    public class DlcWindow : Window
 | 
			
		||||
    {
 | 
			
		||||
        private readonly VirtualFileSystem _virtualFileSystem;
 | 
			
		||||
        private readonly string _applicationId;
 | 
			
		||||
        private readonly string _applicationIdBase;
 | 
			
		||||
        private readonly string _dlcJsonPath;
 | 
			
		||||
        private readonly List<DownloadableContentContainer> _dlcContainerList;
 | 
			
		||||
 | 
			
		||||
@@ -36,16 +36,16 @@ namespace Ryujinx.UI.Windows
 | 
			
		||||
        [GUI] TreeSelection _dlcTreeSelection;
 | 
			
		||||
#pragma warning restore CS0649, IDE0044
 | 
			
		||||
 | 
			
		||||
        public DlcWindow(VirtualFileSystem virtualFileSystem, string titleId, ApplicationData applicationData) : this(new Builder("Ryujinx.Gtk3.UI.Windows.DlcWindow.glade"), virtualFileSystem, titleId, applicationData) { }
 | 
			
		||||
        public DlcWindow(VirtualFileSystem virtualFileSystem, string applicationIdBase, ApplicationData applicationData) : this(new Builder("Ryujinx.Gtk3.UI.Windows.DlcWindow.glade"), virtualFileSystem, applicationIdBase, applicationData) { }
 | 
			
		||||
 | 
			
		||||
        private DlcWindow(Builder builder, VirtualFileSystem virtualFileSystem, string applicationId, ApplicationData applicationData) : base(builder.GetRawOwnedObject("_dlcWindow"))
 | 
			
		||||
        private DlcWindow(Builder builder, VirtualFileSystem virtualFileSystem, string applicationIdBase, ApplicationData applicationData) : base(builder.GetRawOwnedObject("_dlcWindow"))
 | 
			
		||||
        {
 | 
			
		||||
            builder.Autoconnect(this);
 | 
			
		||||
 | 
			
		||||
            _applicationId = applicationId;
 | 
			
		||||
            _applicationIdBase = applicationIdBase;
 | 
			
		||||
            _virtualFileSystem = virtualFileSystem;
 | 
			
		||||
            _dlcJsonPath = System.IO.Path.Combine(AppDataManager.GamesDirPath, _applicationId, "dlc.json");
 | 
			
		||||
            _baseTitleInfoLabel.Text = $"DLC Available for {applicationData.Name} [{applicationId.ToUpper()}]";
 | 
			
		||||
            _dlcJsonPath = System.IO.Path.Combine(AppDataManager.GamesDirPath, _applicationIdBase, "dlc.json");
 | 
			
		||||
            _baseTitleInfoLabel.Text = $"DLC Available for {applicationData.Name} [{applicationIdBase.ToUpper()}]";
 | 
			
		||||
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
@@ -163,7 +163,7 @@ namespace Ryujinx.UI.Windows
 | 
			
		||||
 | 
			
		||||
                if (nca.Header.ContentType == NcaContentType.PublicData)
 | 
			
		||||
                {
 | 
			
		||||
                    if (nca.GetProgramIdBase() != (ulong.Parse(_applicationId, NumberStyles.HexNumber) & ~0x1FFFUL))
 | 
			
		||||
                    if (nca.GetProgramIdBase() != ulong.Parse(_applicationIdBase, NumberStyles.HexNumber))
 | 
			
		||||
                    {
 | 
			
		||||
                        continue;
 | 
			
		||||
                    }
 | 
			
		||||
 
 | 
			
		||||
@@ -51,7 +51,7 @@ namespace Ryujinx.UI.Windows
 | 
			
		||||
 | 
			
		||||
            _applicationData = applicationData;
 | 
			
		||||
            _virtualFileSystem = virtualFileSystem;
 | 
			
		||||
            _updateJsonPath = System.IO.Path.Combine(AppDataManager.GamesDirPath, applicationData.IdString, "updates.json");
 | 
			
		||||
            _updateJsonPath = System.IO.Path.Combine(AppDataManager.GamesDirPath, applicationData.IdBaseString, "updates.json");
 | 
			
		||||
            _radioButtonToPathDictionary = new Dictionary<RadioButton, string>();
 | 
			
		||||
 | 
			
		||||
            try
 | 
			
		||||
@@ -67,7 +67,7 @@ namespace Ryujinx.UI.Windows
 | 
			
		||||
                };
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            _baseTitleInfoLabel.Text = $"Updates Available for {applicationData.Name} [{applicationData.IdString}]";
 | 
			
		||||
            _baseTitleInfoLabel.Text = $"Updates Available for {applicationData.Name} [{applicationData.IdBaseString}]";
 | 
			
		||||
 | 
			
		||||
            // Try to get updates from PFS first
 | 
			
		||||
            AddUpdate(_applicationData.Path, true);
 | 
			
		||||
 
 | 
			
		||||
@@ -139,7 +139,7 @@ namespace Ryujinx.HLE.Loaders.Processes.Extensions
 | 
			
		||||
            ulong titleIdBase = mainNca.GetProgramIdBase();
 | 
			
		||||
 | 
			
		||||
            // Load update information if exists.
 | 
			
		||||
            string titleUpdateMetadataPath = Path.Combine(AppDataManager.GamesDirPath, mainNca.Header.TitleId.ToString("x16"), "updates.json");
 | 
			
		||||
            string titleUpdateMetadataPath = Path.Combine(AppDataManager.GamesDirPath, titleIdBase.ToString("x16"), "updates.json");
 | 
			
		||||
            if (File.Exists(titleUpdateMetadataPath))
 | 
			
		||||
            {
 | 
			
		||||
                updatePath = JsonHelper.DeserializeFromFile(titleUpdateMetadataPath, _applicationSerializerContext.TitleUpdateMetadata).Selected;
 | 
			
		||||
 
 | 
			
		||||
@@ -118,7 +118,7 @@ namespace Ryujinx.HLE.Loaders.Processes.Extensions
 | 
			
		||||
                device.Configuration.ContentManager.ClearAocData();
 | 
			
		||||
 | 
			
		||||
                // Load DownloadableContents.
 | 
			
		||||
                string addOnContentMetadataPath = System.IO.Path.Combine(AppDataManager.GamesDirPath, mainNca.Header.TitleId.ToString("x16"), "dlc.json");
 | 
			
		||||
                string addOnContentMetadataPath = System.IO.Path.Combine(AppDataManager.GamesDirPath, mainNca.GetProgramIdBase().ToString("x16"), "dlc.json");
 | 
			
		||||
                if (File.Exists(addOnContentMetadataPath))
 | 
			
		||||
                {
 | 
			
		||||
                    List<DownloadableContentContainer> dlcContainerList = JsonHelper.DeserializeFromFile(addOnContentMetadataPath, _contentSerializerContext.ListDownloadableContentContainer);
 | 
			
		||||
 
 | 
			
		||||
@@ -42,6 +42,8 @@ namespace Ryujinx.UI.App.Common
 | 
			
		||||
 | 
			
		||||
        [JsonIgnore] public ulong IdBase => Id & ~0x1FFFUL;
 | 
			
		||||
 | 
			
		||||
        [JsonIgnore] public string IdBaseString => IdBase.ToString("x16");
 | 
			
		||||
 | 
			
		||||
        public static string GetBuildId(VirtualFileSystem virtualFileSystem, IntegrityCheckLevel checkLevel, string titleFilePath)
 | 
			
		||||
        {
 | 
			
		||||
            using FileStream file = new(titleFilePath, FileMode.Open, FileAccess.Read);
 | 
			
		||||
 
 | 
			
		||||
@@ -103,7 +103,7 @@ namespace Ryujinx.Ava.UI.ViewModels
 | 
			
		||||
                _storageProvider = desktop.MainWindow.StorageProvider;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            _downloadableContentJsonPath = Path.Combine(AppDataManager.GamesDirPath, applicationData.IdString, "dlc.json");
 | 
			
		||||
            _downloadableContentJsonPath = Path.Combine(AppDataManager.GamesDirPath, applicationData.IdBaseString, "dlc.json");
 | 
			
		||||
 | 
			
		||||
            if (!File.Exists(_downloadableContentJsonPath))
 | 
			
		||||
            {
 | 
			
		||||
 
 | 
			
		||||
@@ -88,7 +88,7 @@ namespace Ryujinx.Ava.UI.ViewModels
 | 
			
		||||
                StorageProvider = desktop.MainWindow.StorageProvider;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            TitleUpdateJsonPath = Path.Combine(AppDataManager.GamesDirPath, ApplicationData.IdString, "updates.json");
 | 
			
		||||
            TitleUpdateJsonPath = Path.Combine(AppDataManager.GamesDirPath, ApplicationData.IdBaseString, "updates.json");
 | 
			
		||||
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
@@ -96,7 +96,7 @@ namespace Ryujinx.Ava.UI.ViewModels
 | 
			
		||||
            }
 | 
			
		||||
            catch
 | 
			
		||||
            {
 | 
			
		||||
                Logger.Warning?.Print(LogClass.Application, $"Failed to deserialize title update data for {ApplicationData.IdString} at {TitleUpdateJsonPath}");
 | 
			
		||||
                Logger.Warning?.Print(LogClass.Application, $"Failed to deserialize title update data for {ApplicationData.IdBaseString} at {TitleUpdateJsonPath}");
 | 
			
		||||
 | 
			
		||||
                TitleUpdateWindowData = new TitleUpdateMetadata
 | 
			
		||||
                {
 | 
			
		||||
 
 | 
			
		||||
@@ -38,7 +38,7 @@ namespace Ryujinx.Ava.UI.Windows
 | 
			
		||||
                SecondaryButtonText = "",
 | 
			
		||||
                CloseButtonText = "",
 | 
			
		||||
                Content = new DownloadableContentManagerWindow(virtualFileSystem, applicationData),
 | 
			
		||||
                Title = string.Format(LocaleManager.Instance[LocaleKeys.DlcWindowTitle], applicationData.Name, applicationData.IdString),
 | 
			
		||||
                Title = string.Format(LocaleManager.Instance[LocaleKeys.DlcWindowTitle], applicationData.Name, applicationData.IdBaseString),
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            Style bottomBorder = new(x => x.OfType<Grid>().Name("DialogSpace").Child().OfType<Border>());
 | 
			
		||||
 
 | 
			
		||||
@@ -40,7 +40,7 @@ namespace Ryujinx.Ava.UI.Windows
 | 
			
		||||
                SecondaryButtonText = "",
 | 
			
		||||
                CloseButtonText = "",
 | 
			
		||||
                Content = new TitleUpdateWindow(virtualFileSystem, applicationData),
 | 
			
		||||
                Title = LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.GameUpdateWindowHeading, applicationData.Name, applicationData.IdString),
 | 
			
		||||
                Title = LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.GameUpdateWindowHeading, applicationData.Name, applicationData.IdBaseString),
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            Style bottomBorder = new(x => x.OfType<Grid>().Name("DialogSpace").Child().OfType<Border>());
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user