using System.Collections.ObjectModel; using System.Reactive; using Avalonia.Platform.Storage; using InkForge.Desktop.Controllers; using InkForge.Desktop.Services; using ReactiveUI; namespace InkForge.Desktop.ViewModels; public class LandingViewModel : ReactiveObject { private ReadOnlyObservableCollection _recentItems; private readonly WorkspaceController _workspaceController; public ReactiveCommand CreateNew { get; } public ReactiveCommand OpenNew { get; } public ReadOnlyObservableCollection RecentItems => _recentItems; public LandingViewModel(WorkspaceController workspaceController) { _workspaceController = workspaceController; CreateNew = ReactiveCommand.CreateFromTask(OnCreateNew); OpenNew = ReactiveCommand.CreateFromTask(OnOpenNew); } private async Task OnCreateNew() { var storageProvider = this.GetStorageProvider()!; var documents = await storageProvider.TryGetWellKnownFolderAsync(WellKnownFolder.Documents); var file = await storageProvider.SaveFilePickerAsync(new FilePickerSaveOptions() { DefaultExtension = ".ifdb", FileTypeChoices = [ new FilePickerFileType("InkForge Database File") { Patterns = [ "*.ifdb" ], }, ], SuggestedStartLocation = documents, Title = "Select InkForge Database Name", }); if (file?.TryGetLocalPath() is not { } filePath) { return; } await _workspaceController.OpenWorkspace(filePath, true); } private async Task OnOpenNew() { var storageProvider = this.GetStorageProvider()!; var documents = await storageProvider.TryGetWellKnownFolderAsync(WellKnownFolder.Documents); var files = await storageProvider.OpenFilePickerAsync(new FilePickerOpenOptions() { AllowMultiple = false, SuggestedStartLocation = documents, FileTypeFilter = [ new FilePickerFileType("InkForge Database File") { Patterns = [ "*.ifdb" ] } ], Title = "Open InkForge Database file" }); if (files.Count != 1) { return; } if (files[0].TryGetLocalPath() is not { } filePath) { return; } await _workspaceController.OpenWorkspace(filePath, false); } }