From ad27c2a9ab60ae3b18c35533e3786b46dd73a1d0 Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Mon, 7 Jul 2025 23:45:03 +0100 Subject: [PATCH] [Refactor] Replace OpenFolderDialog with StorageProvider for folder selection --- RomRepoMgr/ViewModels/MainWindowViewModel.cs | 61 ++++++++++---------- RomRepoMgr/ViewModels/SettingsViewModel.cs | 33 ++++++----- 2 files changed, 46 insertions(+), 48 deletions(-) diff --git a/RomRepoMgr/ViewModels/MainWindowViewModel.cs b/RomRepoMgr/ViewModels/MainWindowViewModel.cs index b6fe8a6..72bdf3e 100644 --- a/RomRepoMgr/ViewModels/MainWindowViewModel.cs +++ b/RomRepoMgr/ViewModels/MainWindowViewModel.cs @@ -33,6 +33,7 @@ using System.Threading.Tasks; using Avalonia; using Avalonia.Controls; using Avalonia.Controls.ApplicationLifetimes; +using Avalonia.Platform.Storage; using Avalonia.Threading; using MsBox.Avalonia; using MsBox.Avalonia.Enums; @@ -190,17 +191,16 @@ public class MainWindowViewModel : ViewModelBase async Task ExecuteImportDatFolderCommandAsync() { - var dlgOpen = new OpenFolderDialog - { - Title = Localization.ImportDatFolderDialogTitle - }; + IReadOnlyList result = + await _view.StorageProvider.OpenFolderPickerAsync(new FolderPickerOpenOptions + { + Title = Localization.ImportDatFolderDialogTitle + }); - string result = await dlgOpen.ShowAsync(_view); - - if(result == null) return; + if(result.Count < 1) return; var dialog = new ImportDatFolder(); - var importDatFolderViewModel = new ImportDatFolderViewModel(dialog, result); + var importDatFolderViewModel = new ImportDatFolderViewModel(dialog, result[0].Path.LocalPath); importDatFolderViewModel.RomSetAdded += ImportDatViewModelOnRomSetAdded; dialog.DataContext = importDatFolderViewModel; _ = dialog.ShowDialog(_view); @@ -208,17 +208,16 @@ public class MainWindowViewModel : ViewModelBase async Task ExecuteImportRomFolderCommandAsync() { - var dlgOpen = new OpenFolderDialog - { - Title = Localization.ImportRomsFolderDialogTitle - }; + IReadOnlyList result = + await _view.StorageProvider.OpenFolderPickerAsync(new FolderPickerOpenOptions + { + Title = Localization.ImportRomsFolderDialogTitle + }); - string result = await dlgOpen.ShowAsync(_view); - - if(result == null) return; + if(result.Count < 1) return; var dialog = new ImportRomFolder(); - var importRomFolderViewModel = new ImportRomFolderViewModel(dialog, result); + var importRomFolderViewModel = new ImportRomFolderViewModel(dialog, result[0].Path.LocalPath); dialog.DataContext = importRomFolderViewModel; _ = dialog.ShowDialog(_view); } @@ -289,17 +288,16 @@ public class MainWindowViewModel : ViewModelBase async Task ExecuteExportRomsCommandAsync() { - var dlgOpen = new OpenFolderDialog - { - Title = Localization.ExportRomsDialogTitle - }; + IReadOnlyList result = + await _view.StorageProvider.OpenFolderPickerAsync(new FolderPickerOpenOptions + { + Title = Localization.ExportRomsDialogTitle + }); - string result = await dlgOpen.ShowAsync(_view); - - if(result == null) return; + if(result.Count < 1) return; var dialog = new ExportRoms(); - var viewModel = new ExportRomsViewModel(dialog, result, SelectedRomSet.Id); + var viewModel = new ExportRomsViewModel(dialog, result[0].Path.LocalPath, SelectedRomSet.Id); dialog.DataContext = viewModel; _ = dialog.ShowDialog(_view); } @@ -308,20 +306,19 @@ public class MainWindowViewModel : ViewModelBase { if(Vfs != null) return; - var dlgOpen = new OpenFolderDialog - { - Title = Localization.SelectMountPointDialogTitle - }; + IReadOnlyList result = + await _view.StorageProvider.OpenFolderPickerAsync(new FolderPickerOpenOptions + { + Title = Localization.SelectMountPointDialogTitle + }); - string result = await dlgOpen.ShowAsync(_view); - - if(result == null) return; + if(result.Count < 1) return; try { Vfs = new Vfs(); Vfs.Umounted += VfsOnUmounted; - Vfs.MountTo(result); + Vfs.MountTo(result[0].Path.LocalPath); } catch(Exception) { diff --git a/RomRepoMgr/ViewModels/SettingsViewModel.cs b/RomRepoMgr/ViewModels/SettingsViewModel.cs index 57847c8..f77e579 100644 --- a/RomRepoMgr/ViewModels/SettingsViewModel.cs +++ b/RomRepoMgr/ViewModels/SettingsViewModel.cs @@ -24,10 +24,12 @@ *******************************************************************************/ using System; +using System.Collections.Generic; using System.IO; using System.Reactive; using System.Threading.Tasks; using Avalonia.Controls; +using Avalonia.Platform.Storage; using Avalonia.Threading; using Microsoft.EntityFrameworkCore; using MsBox.Avalonia; @@ -187,30 +189,29 @@ public sealed class SettingsViewModel : ViewModelBase async Task ExecuteTemporaryCommandAsync() { - var dlgFolder = new OpenFolderDialog - { - Title = Localization.ChooseTemporaryFolder - }; + IReadOnlyList result = + await _view.StorageProvider.OpenFolderPickerAsync(new FolderPickerOpenOptions + { + Title = Localization.ChooseTemporaryFolder + }); - string result = await dlgFolder.ShowAsync(_view); + if(result.Count < 1) return; - if(result == null) return; - - TemporaryPath = result; + TemporaryPath = result[0].Path.LocalPath; } async Task ExecuteRepositoryCommandAsync() { - var dlgFolder = new OpenFolderDialog - { - Title = Localization.ChooseRepositoryFolder - }; + IReadOnlyList result = + await _view.StorageProvider.OpenFolderPickerAsync(new FolderPickerOpenOptions + { + Title = Localization.ChooseRepositoryFolder, + AllowMultiple = false + }); - string result = await dlgFolder.ShowAsync(_view); + if(result.Count < 1) return; - if(result == null) return; - - RepositoryPath = result; + RepositoryPath = result[0].Path.LocalPath; } async Task ExecuteDatabaseCommandAsync()