// // PacketLogDocumentViewModel.cs // // Copyright (c) František Boháček. All rights reserved. // Licensed under the MIT license. See LICENSE file in the project root for full license information. using System; using System.ComponentModel; using System.Linq; using System.Reactive; using System.Reactive.Disposables; using System.Reactive.Linq; using System.Reflection; using System.Threading.Tasks; using Avalonia.Controls; using Avalonia.Controls.ApplicationLifetimes; using Dock.Model.Mvvm.Controls; using PacketLogger.Models.Packets; using ReactiveUI; namespace PacketLogger.ViewModels; /// public class PacketLogDocumentViewModel : Document, INotifyPropertyChanged { /// /// Initializes a new instance of the class. /// public PacketLogDocumentViewModel() { OpenDummy = ReactiveCommand.CreateFromTask ( () => Task.Run(() => { Loading = true; Name = "Dummy"; LogViewModel = new LogTabViewModel(new DummyPacketProvider()); Loaded = true; }) ); OpenFile = ReactiveCommand.CreateFromTask ( async () => { var mainWindow = (App.Current!.ApplicationLifetime as IClassicDesktopStyleApplicationLifetime) ?.MainWindow; var result = await new OpenFileDialog() { AllowMultiple = false, InitialFileName = Assembly.GetEntryAssembly()?.GetModules().FirstOrDefault()?.FullyQualifiedName }.ShowAsync(mainWindow!); if (result is null || result.Length == 0) { return; } Loading = true; var path = result[0]; var provider = new FilePacketProvider(path); var openResult = await provider.Open(); if (!openResult.IsSuccess) { Console.WriteLine("Could not open the file."); return; } LogViewModel = new LogTabViewModel(provider); Loaded = true; Loading = false; } ); } /// /// Gets or sets the name of the tab. /// public string Name { get; set; } = "New tab"; /// /// Gets whether the document is currently being loaded. /// public bool Loading { get; private set; } = false; /// /// Gets whether a document has been loaded. /// public bool Loaded { get; private set; } /// /// Gets the log tab view model. /// public LogTabViewModel? LogViewModel { get; private set; } /// /// Gets command for opening a dummy. /// public ReactiveCommand OpenDummy { get; } /// /// Gets command for opening a file. /// public ReactiveCommand OpenFile { get; } }