using System.Collections.ObjectModel; using System.Diagnostics; using System.Reactive; using Avalonia.Controls; using CommunityToolkit.Mvvm.DependencyInjection; using CommunityToolkit.Mvvm.Input; using HetznerCloudApi; using PSCHelpdesk.Plugins.HetznerServer.Models; using PSCHelpdesk.Plugins.HetznerServer.Views; using PSCHelpdesk.Shared.Service; using PSCHelpdesk.Shared.Setting; using PSCHelpdesk.Shared.ViewModels; using ReactiveUI; namespace PSCHelpdesk.Plugins.HetznerServer.ViewModels; public partial class ServerViewModel : ViewModelBase, IViewModelBase { public ReactiveCommand OpenSSH { get; } public ReactiveCommand SelectionChanged { get; } private SettingsManager _settingsManager; public ServerViewModel() { OpenSSH = ReactiveCommand.Create(openSSH); SelectionChanged = ReactiveCommand.Create(selectionChanged); Server = new ObservableCollection(); SelectedServer = new Server(1,"","","","",""); _settingsManager = (SettingsManager)Ioc.Default.GetService(); loadServers(); } private bool _isPagePaneOpen = true; public bool IsPagePaneOpen { get => _isPagePaneOpen; set => SetAndRaisePropertyChanged(ref _isPagePaneOpen, value); } private Server _selectedServer; public Server SelectedServer { get => _selectedServer; set => SetAndRaisePropertyChanged(ref _selectedServer, value); } private ObservableCollection _server; public ObservableCollection Server { get => _server; set => SetAndRaisePropertyChanged(ref _server, value); } private async void loadServers() { var settings = new Settings(); _settingsManager.LoadPluginSettings("HetznerSettings", settings); if (settings.HetznerApiKey != "") { HetznerCloudClient hetznerCloudClient = new HetznerCloudClient(settings.HetznerApiKey); List list = await hetznerCloudClient.Server.Get(); foreach (var server in list) { Server.Add(new Server(server.Id, server.Name, server.ServerType.Name, server.Status, server.PublicNet.Ipv4.Ip, server.PublicNet.Ipv6.Ip)); } SelectedServer = Server[0]; } } void openSSH(Server server) { //Process.Start(_settingsManager.CoreSettings.SSHClientExecutable,string.Format(_settingsManager.CoreSettings.SSHClientExecutableArgs, server.Ipv4)); } public void RunTheThing(Server server) { Process.Start(_settingsManager.CoreSettings.SSHClientExecutable,string.Format(_settingsManager.CoreSettings.SSHClientExecutableArgs, server.Ipv4)); } void selectionChanged(SelectionChangedEventArgs args) { this.SelectedServer = (args.Source as DataGrid).SelectedItem as Server; IsPagePaneOpen = true; } public UserControl GetViewControl() { return new ServerView(); } }