Просмотр исходного кода

UI: Fix sections extraction (#4820)

* 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

* Addresses feedback
Ac_K 3 лет назад
Родитель
Сommit
d6698680be

+ 8 - 3
src/Ryujinx.Ava/Common/ApplicationHelper.cs

@@ -233,9 +233,14 @@ namespace Ryujinx.Ava.Common
 
                     try
                     {
-                        IFileSystem ncaFileSystem = patchNca != null
-                            ? mainNca.OpenFileSystemWithPatch(patchNca, index, IntegrityCheckLevel.ErrorOnInvalid)
-                            : mainNca.OpenFileSystem(index, IntegrityCheckLevel.ErrorOnInvalid);
+                        bool sectionExistsInPatch = false;
+                        if (patchNca != null)
+                        {
+                            sectionExistsInPatch = patchNca.CanOpenSection(index);
+                        }
+
+                        IFileSystem ncaFileSystem = sectionExistsInPatch ? mainNca.OpenFileSystemWithPatch(patchNca, index, IntegrityCheckLevel.ErrorOnInvalid)
+                                                                         : mainNca.OpenFileSystem(index, IntegrityCheckLevel.ErrorOnInvalid);
 
                         FileSystemClient fsClient = _horizonClient.Fs;
 

+ 2 - 2
src/Ryujinx.Ava/UI/Controls/ApplicationContextMenu.axaml

@@ -65,7 +65,7 @@
     </MenuItem>
     <MenuItem Header="{locale:Locale GameListContextMenuExtractData}">
         <MenuItem
-            Click="ExtractApplicationLogo_Click"
+            Click="ExtractApplicationExeFs_Click"
             Header="{locale:Locale GameListContextMenuExtractDataExeFS}"
             ToolTip.Tip="{locale:Locale GameListContextMenuExtractDataExeFSToolTip}" />
         <MenuItem
@@ -73,7 +73,7 @@
             Header="{locale:Locale GameListContextMenuExtractDataRomFS}"
             ToolTip.Tip="{locale:Locale GameListContextMenuExtractDataRomFSToolTip}" />
         <MenuItem
-            Click="ExtractApplicationExeFs_Click"
+            Click="ExtractApplicationLogo_Click"
             Header="{locale:Locale GameListContextMenuExtractDataLogo}"
             ToolTip.Tip="{locale:Locale GameListContextMenuExtractDataLogoToolTip}" />
     </MenuItem>

+ 4 - 4
src/Ryujinx.Ava/UI/Controls/ApplicationContextMenu.axaml.cs

@@ -289,13 +289,13 @@ namespace Ryujinx.Ava.UI.Controls
             }
         }
 
-        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 @@ namespace Ryujinx.Ava.UI.Controls
             }
         }
 
-        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);
             }
         }
     }

+ 8 - 2
src/Ryujinx/Ui/Widgets/GameTableContextMenu.cs

@@ -270,8 +270,14 @@ namespace Ryujinx.Ui.Widgets
 
                         int index = Nca.GetSectionIndexFromType(ncaSectionType, mainNca.Header.ContentType);
 
-                        IFileSystem ncaFileSystem = patchNca != null ? mainNca.OpenFileSystemWithPatch(patchNca, index, IntegrityCheckLevel.ErrorOnInvalid)
-                                                                     : mainNca.OpenFileSystem(index, IntegrityCheckLevel.ErrorOnInvalid);
+                        bool sectionExistsInPatch = false;
+                        if (patchNca != null)
+                        {
+                            sectionExistsInPatch = patchNca.CanOpenSection(index);
+                        }
+
+                        IFileSystem ncaFileSystem = sectionExistsInPatch ? mainNca.OpenFileSystemWithPatch(patchNca, index, IntegrityCheckLevel.ErrorOnInvalid)
+                                                                         : mainNca.OpenFileSystem(index, IntegrityCheckLevel.ErrorOnInvalid);
 
                         FileSystemClient fsClient = _horizonClient.Fs;