From 0d8e00e67b6086513146612f7a2a46bddf3da0fa Mon Sep 17 00:00:00 2001 From: Ac_K Date: Fri, 5 May 2023 22:06:54 +0200 Subject: [PATCH 1/2] UI: Fix sections extraction There is currently an issue when the update NCA doesn't contains the section we want to extract, this is fixed by adding a check. I have fixed the inverted handler of ExeFs/Logo introduced in #4755. Fixes #4521 --- src/Ryujinx.Ava/Common/ApplicationHelper.cs | 11 ++++++++--- .../UI/Controls/ApplicationContextMenu.axaml | 4 ++-- .../UI/Controls/ApplicationContextMenu.axaml.cs | 8 ++++---- src/Ryujinx/Ui/Widgets/GameTableContextMenu.cs | 10 ++++++++-- 4 files changed, 22 insertions(+), 11 deletions(-) diff --git a/src/Ryujinx.Ava/Common/ApplicationHelper.cs b/src/Ryujinx.Ava/Common/ApplicationHelper.cs index 8c36a63651a6..878751ec40e1 100644 --- a/src/Ryujinx.Ava/Common/ApplicationHelper.cs +++ b/src/Ryujinx.Ava/Common/ApplicationHelper.cs @@ -233,9 +233,14 @@ public static async Task ExtractSection(NcaSectionType ncaSectionType, string ti try { - IFileSystem ncaFileSystem = patchNca != null - ? mainNca.OpenFileSystemWithPatch(patchNca, index, IntegrityCheckLevel.ErrorOnInvalid) - : mainNca.OpenFileSystem(index, IntegrityCheckLevel.ErrorOnInvalid); + bool isSectionExistInPatch = false; + if (patchNca != null) + { + isSectionExistInPatch = patchNca.CanOpenSection(index); + } + + IFileSystem ncaFileSystem = isSectionExistInPatch ? mainNca.OpenFileSystemWithPatch(patchNca, index, IntegrityCheckLevel.ErrorOnInvalid) + : mainNca.OpenFileSystem(index, IntegrityCheckLevel.ErrorOnInvalid); FileSystemClient fsClient = _horizonClient.Fs; diff --git a/src/Ryujinx.Ava/UI/Controls/ApplicationContextMenu.axaml b/src/Ryujinx.Ava/UI/Controls/ApplicationContextMenu.axaml index 1750e8000426..35d5fe859ae2 100644 --- a/src/Ryujinx.Ava/UI/Controls/ApplicationContextMenu.axaml +++ b/src/Ryujinx.Ava/UI/Controls/ApplicationContextMenu.axaml @@ -65,7 +65,7 @@ diff --git a/src/Ryujinx.Ava/UI/Controls/ApplicationContextMenu.axaml.cs b/src/Ryujinx.Ava/UI/Controls/ApplicationContextMenu.axaml.cs index 83fe29ea893e..90c72e028921 100644 --- a/src/Ryujinx.Ava/UI/Controls/ApplicationContextMenu.axaml.cs +++ b/src/Ryujinx.Ava/UI/Controls/ApplicationContextMenu.axaml.cs @@ -289,13 +289,13 @@ public void OpenShaderCacheDirectory_Click(object sender, RoutedEventArgs args) } } - public async void ExtractApplicationLogo_Click(object sender, RoutedEventArgs args) + public async void ExtractApplicationExeFs_Click(object sender, RoutedEventArgs args) { var viewModel = (sender as MenuItem)?.DataContext as MainWindowViewModel; if (viewModel?.SelectedApplication != null) { - await ApplicationHelper.ExtractSection(NcaSectionType.Logo, viewModel.SelectedApplication.Path, viewModel.SelectedApplication.TitleName); + await ApplicationHelper.ExtractSection(NcaSectionType.Code, viewModel.SelectedApplication.Path, viewModel.SelectedApplication.TitleName); } } @@ -309,13 +309,13 @@ public async void ExtractApplicationRomFs_Click(object sender, RoutedEventArgs a } } - public async void ExtractApplicationExeFs_Click(object sender, RoutedEventArgs args) + public async void ExtractApplicationLogo_Click(object sender, RoutedEventArgs args) { var viewModel = (sender as MenuItem)?.DataContext as MainWindowViewModel; if (viewModel?.SelectedApplication != null) { - await ApplicationHelper.ExtractSection(NcaSectionType.Code, viewModel.SelectedApplication.Path, viewModel.SelectedApplication.TitleName); + await ApplicationHelper.ExtractSection(NcaSectionType.Logo, viewModel.SelectedApplication.Path, viewModel.SelectedApplication.TitleName); } } } diff --git a/src/Ryujinx/Ui/Widgets/GameTableContextMenu.cs b/src/Ryujinx/Ui/Widgets/GameTableContextMenu.cs index 6d8331658634..2d8e636849cf 100644 --- a/src/Ryujinx/Ui/Widgets/GameTableContextMenu.cs +++ b/src/Ryujinx/Ui/Widgets/GameTableContextMenu.cs @@ -270,8 +270,14 @@ private void ExtractSection(NcaSectionType ncaSectionType, int programIndex = 0) int index = Nca.GetSectionIndexFromType(ncaSectionType, mainNca.Header.ContentType); - IFileSystem ncaFileSystem = patchNca != null ? mainNca.OpenFileSystemWithPatch(patchNca, index, IntegrityCheckLevel.ErrorOnInvalid) - : mainNca.OpenFileSystem(index, IntegrityCheckLevel.ErrorOnInvalid); + bool isSectionExistInPatch = false; + if (patchNca != null) + { + isSectionExistInPatch = patchNca.CanOpenSection(index); + } + + IFileSystem ncaFileSystem = isSectionExistInPatch ? mainNca.OpenFileSystemWithPatch(patchNca, index, IntegrityCheckLevel.ErrorOnInvalid) + : mainNca.OpenFileSystem(index, IntegrityCheckLevel.ErrorOnInvalid); FileSystemClient fsClient = _horizonClient.Fs; From 3ace47c20025d975bb4668be102cbd084a69f779 Mon Sep 17 00:00:00 2001 From: Ac_K Date: Fri, 5 May 2023 23:00:40 +0200 Subject: [PATCH 2/2] Addresses feedback --- src/Ryujinx.Ava/Common/ApplicationHelper.cs | 8 ++++---- src/Ryujinx/Ui/Widgets/GameTableContextMenu.cs | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/Ryujinx.Ava/Common/ApplicationHelper.cs b/src/Ryujinx.Ava/Common/ApplicationHelper.cs index 878751ec40e1..c961d76c8551 100644 --- a/src/Ryujinx.Ava/Common/ApplicationHelper.cs +++ b/src/Ryujinx.Ava/Common/ApplicationHelper.cs @@ -233,14 +233,14 @@ public static async Task ExtractSection(NcaSectionType ncaSectionType, string ti try { - bool isSectionExistInPatch = false; + bool sectionExistsInPatch = false; if (patchNca != null) { - isSectionExistInPatch = patchNca.CanOpenSection(index); + sectionExistsInPatch = patchNca.CanOpenSection(index); } - IFileSystem ncaFileSystem = isSectionExistInPatch ? mainNca.OpenFileSystemWithPatch(patchNca, index, IntegrityCheckLevel.ErrorOnInvalid) - : mainNca.OpenFileSystem(index, IntegrityCheckLevel.ErrorOnInvalid); + IFileSystem ncaFileSystem = sectionExistsInPatch ? mainNca.OpenFileSystemWithPatch(patchNca, index, IntegrityCheckLevel.ErrorOnInvalid) + : mainNca.OpenFileSystem(index, IntegrityCheckLevel.ErrorOnInvalid); FileSystemClient fsClient = _horizonClient.Fs; diff --git a/src/Ryujinx/Ui/Widgets/GameTableContextMenu.cs b/src/Ryujinx/Ui/Widgets/GameTableContextMenu.cs index 2d8e636849cf..28ec5a43c753 100644 --- a/src/Ryujinx/Ui/Widgets/GameTableContextMenu.cs +++ b/src/Ryujinx/Ui/Widgets/GameTableContextMenu.cs @@ -270,14 +270,14 @@ private void ExtractSection(NcaSectionType ncaSectionType, int programIndex = 0) int index = Nca.GetSectionIndexFromType(ncaSectionType, mainNca.Header.ContentType); - bool isSectionExistInPatch = false; + bool sectionExistsInPatch = false; if (patchNca != null) { - isSectionExistInPatch = patchNca.CanOpenSection(index); + sectionExistsInPatch = patchNca.CanOpenSection(index); } - IFileSystem ncaFileSystem = isSectionExistInPatch ? mainNca.OpenFileSystemWithPatch(patchNca, index, IntegrityCheckLevel.ErrorOnInvalid) - : mainNca.OpenFileSystem(index, IntegrityCheckLevel.ErrorOnInvalid); + IFileSystem ncaFileSystem = sectionExistsInPatch ? mainNca.OpenFileSystemWithPatch(patchNca, index, IntegrityCheckLevel.ErrorOnInvalid) + : mainNca.OpenFileSystem(index, IntegrityCheckLevel.ErrorOnInvalid); FileSystemClient fsClient = _horizonClient.Fs;