96 lines
3.1 KiB
C#
96 lines
3.1 KiB
C#
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<Server, Unit> OpenSSH { get; }
|
|
public ReactiveCommand<SelectionChangedEventArgs, Unit> SelectionChanged { get; }
|
|
|
|
private SettingsManager _settingsManager;
|
|
public ServerViewModel()
|
|
{
|
|
OpenSSH = ReactiveCommand.Create<Server>(openSSH);
|
|
SelectionChanged = ReactiveCommand.Create<SelectionChangedEventArgs>(selectionChanged);
|
|
Server = new ObservableCollection<Server>();
|
|
SelectedServer = new Server(1,"","","","","");
|
|
_settingsManager = (SettingsManager)Ioc.Default.GetService<ISettingsManager>();
|
|
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> _server;
|
|
public ObservableCollection<Server> 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<HetznerCloudApi.Object.Server.Server> 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();
|
|
}
|
|
} |