Explorar o código

UI: Only show DLC RomFS button under Extract Data when DLCs are available.

Also convert the constructor of DlcSelectViewModel to expect a normal title id and not one already converted to the base ID.
Evan Husted hai 1 ano
pai
achega
e8a7d5b0b7

+ 1 - 0
src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml

@@ -117,6 +117,7 @@
             Header="{ext:Locale GameListContextMenuExtractDataRomFS}"
             ToolTip.Tip="{ext:Locale GameListContextMenuExtractDataRomFSToolTip}" />
         <MenuItem
+            IsVisible="{Binding HasDlc}"
             Click="ExtractAocRomFs_Click"
             Header="{ext:Locale GameListContextMenuExtractDataAocRomFS}"
             ToolTip.Tip="{ext:Locale GameListContextMenuExtractDataAocRomFSToolTip}" />

+ 1 - 1
src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml.cs

@@ -334,7 +334,7 @@ namespace Ryujinx.Ava.UI.Controls
             if (sender is not MenuItem { DataContext: MainWindowViewModel { SelectedApplication: not null } viewModel })
                 return;
 
-            DownloadableContentModel selectedDlc = await DlcSelectView.Show(viewModel.SelectedApplication.IdBase, viewModel.ApplicationLibrary);
+            DownloadableContentModel selectedDlc = await DlcSelectView.Show(viewModel.SelectedApplication.Id, viewModel.ApplicationLibrary);
             
             if (selectedDlc is not null)
             {

+ 1 - 3
src/Ryujinx/UI/ViewModels/DlcSelectViewModel.cs

@@ -14,9 +14,7 @@ namespace Ryujinx.Ava.UI.ViewModels
         
         public DlcSelectViewModel(ulong titleId, ApplicationLibrary appLibrary)
         {
-            _dlcs = appLibrary.DownloadableContents.Items
-                .Where(x => x.Dlc.TitleIdBase == titleId)
-                .Select(x => x.Dlc)
+            _dlcs = appLibrary.FindDlcsFor(titleId)
                 .OrderBy(it => it.IsBundled ? 0 : 1)
                 .ThenBy(it => it.TitleId)
                 .ToArray();

+ 2 - 0
src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs

@@ -360,6 +360,8 @@ namespace Ryujinx.Ava.UI.ViewModels
             }
         }
 
+        public bool HasDlc => ApplicationLibrary.HasDlcs(SelectedApplication.Id);
+
         public bool OpenUserSaveDirectoryEnabled => SelectedApplication.HasControlHolder && SelectedApplication.ControlHolder.Value.UserAccountSaveDataSize > 0;
 
         public bool OpenDeviceSaveDirectoryEnabled => SelectedApplication.HasControlHolder && SelectedApplication.ControlHolder.Value.DeviceSaveDataSize > 0;

+ 18 - 0
src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs

@@ -142,6 +142,24 @@ namespace Ryujinx.Ava.Utilities.AppLibrary
 
             return appData.HasValue;
         }
+        
+        public bool FindUpdate(ulong id, out TitleUpdateModel foundData)
+        {
+            Gommon.Optional<TitleUpdateModel> appData = 
+                TitleUpdates.Keys.FindFirst(x => x.TitleId == id);
+            foundData = appData.HasValue ? appData.Value : null;
+
+            return appData.HasValue;
+        }
+        
+        public TitleUpdateModel[] FindUpdatesFor(ulong id)
+            => TitleUpdates.Keys.Where(x => x.TitleIdBase == (id & ~0x1FFFUL)).ToArray();
+        
+        public DownloadableContentModel[] FindDlcsFor(ulong id)
+            => DownloadableContents.Keys.Where(x => x.TitleIdBase == (id & ~0x1FFFUL)).ToArray();
+        
+        public bool HasDlcs(ulong id)
+            => DownloadableContents.Keys.Any(x => x.TitleIdBase == (id & ~0x1FFFUL));
 
         /// <exception cref="LibHac.Common.Keys.MissingKeyException">The configured key set is missing a key.</exception>
         /// <exception cref="InvalidDataException">The NCA header could not be decrypted.</exception>