Linux: Fix remaining file/folder picker issues (#24)

I fixed the remaining Linux file picker issues after testing on Steam Deck. User profile images, mod manager, title manager, and DLC directory were still using the old file picker methods and not the helper methods. I could only apply the helper method to user profiles, but I came up with a workaround for the others.

The reason for the draft PR: I'd ideally like to fix the other three at the helper level, so maybe @greem can help with that since since he wrote the initial implementation.

Reviewed-on: https://git.ryujinx.app/projects/Ryubing/pulls/24
This commit is contained in:
KeatonTheBot
2026-06-15 01:44:24 +00:00
committed by sh0inx
parent e7a3c94b9c
commit 7b19e041cb
5 changed files with 15 additions and 10 deletions

View File

@@ -13,6 +13,7 @@ using System.Collections.ObjectModel;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using static Ryujinx.Ava.Utilities.StorageProviderExtensions;
namespace Ryujinx.Ava.UI.ViewModels
{
@@ -128,7 +129,7 @@ namespace Ryujinx.Ava.UI.ViewModels
public async void Add()
{
IReadOnlyList<IStorageFile> result = await _storageProvider.OpenFilePickerAsync(new FilePickerOpenOptions
IReadOnlyList<IStorageFile> result = await CoreDumpable(() => _storageProvider.OpenFilePickerAsync(new FilePickerOpenOptions
{
Title = LocaleManager.Instance[LocaleKeys.SelectDlcDialogTitle],
AllowMultiple = true,
@@ -141,7 +142,7 @@ namespace Ryujinx.Ava.UI.ViewModels
MimeTypes = ["application/x-nx-nsp"],
},
},
});
}));
int totalDlcAdded = 0;
foreach (IStorageFile file in result)

View File

@@ -17,6 +17,7 @@ using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.IO;
using System.Linq;
using static Ryujinx.Ava.Utilities.StorageProviderExtensions;
namespace Ryujinx.Ava.UI.ViewModels
{
@@ -288,11 +289,11 @@ namespace Ryujinx.Ava.UI.ViewModels
public async void Add()
{
IReadOnlyList<IStorageFolder> result = await _storageProvider.OpenFolderPickerAsync(new FolderPickerOpenOptions
IReadOnlyList<IStorageFolder> result = await CoreDumpable(() => _storageProvider.OpenFolderPickerAsync(new FolderPickerOpenOptions
{
Title = LocaleManager.Instance[LocaleKeys.SelectModDialogTitle],
AllowMultiple = true,
});
}));
foreach (IStorageFolder folder in result)
{

View File

@@ -11,6 +11,7 @@ using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using static Ryujinx.Ava.Utilities.StorageProviderExtensions;
namespace Ryujinx.Ava.UI.ViewModels
{
@@ -148,7 +149,7 @@ namespace Ryujinx.Ava.UI.ViewModels
public async Task Add()
{
IReadOnlyList<IStorageFile> result = await _storageProvider.OpenFilePickerAsync(new FilePickerOpenOptions
IReadOnlyList<IStorageFile> result = await CoreDumpable(() => _storageProvider.OpenFilePickerAsync(new FilePickerOpenOptions
{
AllowMultiple = true,
FileTypeFilter = new List<FilePickerFileType>
@@ -160,7 +161,7 @@ namespace Ryujinx.Ava.UI.ViewModels
MimeTypes = ["application/x-nx-nsp"],
},
},
});
}));
int totalUpdatesAdded = 0;
foreach (IStorageFile file in result)

View File

@@ -4,10 +4,12 @@ using Avalonia.Platform.Storage;
using Avalonia.VisualTree;
using FluentAvalonia.UI.Controls;
using FluentAvalonia.UI.Navigation;
using Gommon;
using Ryujinx.Ava.Common.Locale;
using Ryujinx.Ava.UI.Controls;
using Ryujinx.Ava.UI.Models;
using Ryujinx.Ava.UI.ViewModels;
using Ryujinx.Ava.Utilities;
using Ryujinx.HLE.FileSystem;
using SkiaSharp;
using System.Collections.Generic;
@@ -62,7 +64,7 @@ namespace Ryujinx.Ava.UI.Views.User
private async void Import_OnClick(object sender, RoutedEventArgs e)
{
IReadOnlyList<IStorageFile> result = await ((Window)this.GetVisualRoot()!).StorageProvider.OpenFilePickerAsync(new FilePickerOpenOptions
Optional<IStorageFile> result = await ((Window)this.GetVisualRoot()!).StorageProvider.OpenSingleFilePickerAsync(new FilePickerOpenOptions
{
AllowMultiple = false,
FileTypeFilter = new List<FilePickerFileType>
@@ -76,9 +78,9 @@ namespace Ryujinx.Ava.UI.Views.User
},
});
if (result.Count > 0)
if (result.HasValue)
{
_profile.Image = ProcessProfileImage(File.ReadAllBytes(result[0].Path.LocalPath));
_profile.Image = ProcessProfileImage(File.ReadAllBytes(result.Value.Path.LocalPath));
_parent.GoBack();
}
}

View File

@@ -29,7 +29,7 @@ namespace Ryujinx.Ava.Utilities
.Then(files => files.Count > 0 ? Optional.Of(files) : default);
}
private static async Task<T> CoreDumpable<T>(Func<Task<T>> picker)
public static async Task<T> CoreDumpable<T>(Func<Task<T>> picker)
{
OsUtils.SetCoreDumpable(true);
try