UI: Dump DLC RomFS.

You can access this in the Manage DLC screen, it's the new button on each DLC line.

Closes #548
This commit is contained in:
Evan Husted
2025-01-21 13:37:18 -06:00
committed by KeatonTheBot
parent 85f33b1654
commit 0380173937
3 changed files with 162 additions and 0 deletions
@@ -8,6 +8,7 @@
xmlns:viewModels="clr-namespace:Ryujinx.Ava.UI.ViewModels"
xmlns:models="clr-namespace:Ryujinx.UI.Common.Models;assembly=Ryujinx.UI.Common"
xmlns:ui="clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia"
xmlns:pi="using:Projektanker.Icons.Avalonia"
xmlns:helpers="clr-namespace:Ryujinx.Ava.UI.Helpers"
Width="500"
Height="380"
@@ -138,6 +139,15 @@
Spacing="10"
Orientation="Horizontal"
HorizontalAlignment="Right">
<Button
VerticalAlignment="Center"
HorizontalAlignment="Right"
Padding="10"
MinWidth="0"
MinHeight="0"
Click="DlcItem_DumpRomfs">
<ui:SymbolIcon Symbol="MoveToFolder"/>
</Button>
<Button
VerticalAlignment="Center"
HorizontalAlignment="Right"
@@ -2,6 +2,8 @@ using Avalonia.Controls;
using Avalonia.Interactivity;
using Avalonia.Styling;
using FluentAvalonia.UI.Controls;
using LibHac.Tools.FsSystem.NcaUtils;
using Ryujinx.Ava.Common;
using Ryujinx.Ava.Common.Locale;
using Ryujinx.Ava.UI.ViewModels;
using Ryujinx.UI.App.Common;
@@ -99,5 +101,18 @@ namespace Ryujinx.Ava.UI.Windows
}
}
}
private async void DlcItem_DumpRomfs(object sender, RoutedEventArgs e)
{
if (sender is not Button { DataContext: DownloadableContentModel dlc }) return;
if (App.MainWindow.ViewModel is not { } viewModel)
return;
await ApplicationHelper.ExtractAoc(
viewModel.StorageProvider,
NcaSectionType.Data,
dlc.ContainerPath,
dlc.FileName);
}
}
}