using System; using System.Diagnostics; using System.Linq; using System.Threading.Tasks; using System.Windows; using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; using Windows.ApplicationModel; using Windows.System; using Wino.Core.Domain.Interfaces; namespace Wino.Server; public partial class ServerViewModel : ObservableObject, IInitializeAsync { private readonly INotificationBuilder _notificationBuilder; public ServerContext Context { get; } public ServerViewModel(ServerContext serverContext, INotificationBuilder notificationBuilder) { Context = serverContext; _notificationBuilder = notificationBuilder; } [RelayCommand] public Task LaunchWinoAsync() { return Launcher.LaunchUriAsync(new Uri($"{App.WinoMailLaunchProtocol}:")).AsTask(); } /// /// Shuts down the application. /// [RelayCommand] public async Task ExitApplication() { // Find the running UWP app by AppDiagnosticInfo API and terminate it if possible. var appDiagnosticInfos = await AppDiagnosticInfo.RequestInfoForPackageAsync(Package.Current.Id.FamilyName); var clientDiagnosticInfo = appDiagnosticInfos.FirstOrDefault(); if (clientDiagnosticInfo == null) { Debug.WriteLine($"Wino Mail client is not running. Termination is skipped."); } else { var appResourceGroupInfo = clientDiagnosticInfo.GetResourceGroups().FirstOrDefault(); if (appResourceGroupInfo != null) { await appResourceGroupInfo.StartTerminateAsync(); Debug.WriteLine($"Wino Mail client is terminated succesfully."); } } Application.Current.Shutdown(); } public async Task ReconnectAsync() => await Context.InitializeAppServiceConnectionAsync(); public Task InitializeAsync() => Context.InitializeAppServiceConnectionAsync(); }