using Avalonia.Platform.Storage; using v2rayN.Desktop.Views; namespace v2rayN.Desktop.Common; internal class UI { private static readonly string caption = Global.AppName; public static async Task ShowYesNo(Window owner, string msg) { var box = new MessageBoxDialog(caption, msg); var result = await box.ShowDialog(owner); return result == ButtonResult.Yes ? ButtonResult.Yes : ButtonResult.No; } public static async Task OpenFileDialog(Window owner, FilePickerFileType? filter) { var sp = GetStorageProvider(owner); if (sp is null) { return null; } // Start async operation to open the dialog. var files = await sp.OpenFilePickerAsync(new FilePickerOpenOptions { AllowMultiple = false, FileTypeFilter = filter is null ? [FilePickerFileTypes.All, FilePickerFileTypes.ImagePng] : [filter] }); return files.FirstOrDefault()?.TryGetLocalPath(); } public static async Task SaveFileDialog(Window owner, string filter) { var sp = GetStorageProvider(owner); if (sp is null) { return null; } // Start async operation to open the dialog. var files = await sp.SaveFilePickerAsync(new FilePickerSaveOptions { }); return files?.TryGetLocalPath(); } private static IStorageProvider? GetStorageProvider(Window owner) { var topLevel = TopLevel.GetTopLevel(owner); return topLevel?.StorageProvider; } }