using Avalonia; using Avalonia.Controls; using Avalonia.Markup.Xaml; using Microsoft.Extensions.DependencyInjection; using hass_workstation_service.Communication.NamedPipe; using JKang.IpcServiceFramework.Client; using System.Threading.Tasks; using Avalonia.Interactivity; using System.Reactive.Linq; using UserInterface.ViewModels; using System.Security; using hass_workstation_service.Communication.InterProcesCommunication.Models; using UserInterface.Util; using System; using System.IO; using System.Diagnostics; namespace UserInterface.Views { public class AppInfo : UserControl { private readonly IIpcClient client; private readonly string _basePath; public AppInfo() { this.InitializeComponent(); // register IPC clients ServiceProvider serviceProvider = new ServiceCollection() .AddNamedPipeIpcClient("info", pipeName: "pipeinternal") .BuildServiceProvider(); // resolve IPC client factory IIpcClientFactory clientFactory = serviceProvider .GetRequiredService>(); // create client this.client = clientFactory.CreateClient("info"); this._basePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Hass Workstation Service"); DataContext = new InfoViewModel(); UpdateVersion(); } public async void UpdateVersion() { try { var result = await this.client.InvokeAsync(x => x.GetCurrentVersion()); ((InfoViewModel)this.DataContext).UpdateServiceVersion(result); } catch (System.Exception) { } } public void GitHub(object sender, RoutedEventArgs args) { BrowserUtil.OpenBrowser("https://github.com/sleevezipper/hass-workstation-service"); } public void Discord(object sender, RoutedEventArgs args) { BrowserUtil.OpenBrowser("https://discord.gg/VraYT2N3wd"); } public void OpenLogDirectory(object sender, RoutedEventArgs args) { string path = Path.Combine(this._basePath, "logs"); Process.Start("explorer.exe", path); } public void OpenConfigDirectory(object sender, RoutedEventArgs args) { Process.Start("explorer.exe", this._basePath); } private void InitializeComponent() { AvaloniaXamlLoader.Load(this); } } }