commit 653ceb01897622bd6ff409e2064eac6eb3c1e6fd Author: Thomas Peterson Date: Mon Nov 4 11:28:08 2024 +0100 Fixes diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..add57be --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +bin/ +obj/ +/packages/ +riderModule.iml +/_ReSharper.Caches/ \ No newline at end of file diff --git a/.idea/.idea.PSCHelpdesk/.idea/avalonia.xml b/.idea/.idea.PSCHelpdesk/.idea/avalonia.xml new file mode 100644 index 0000000..3e1f92f --- /dev/null +++ b/.idea/.idea.PSCHelpdesk/.idea/avalonia.xml @@ -0,0 +1,24 @@ + + + + + + \ No newline at end of file diff --git a/.idea/.idea.PSCHelpdesk/.idea/encodings.xml b/.idea/.idea.PSCHelpdesk/.idea/encodings.xml new file mode 100644 index 0000000..df87cf9 --- /dev/null +++ b/.idea/.idea.PSCHelpdesk/.idea/encodings.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/.idea/.idea.PSCHelpdesk/.idea/indexLayout.xml b/.idea/.idea.PSCHelpdesk/.idea/indexLayout.xml new file mode 100644 index 0000000..7b08163 --- /dev/null +++ b/.idea/.idea.PSCHelpdesk/.idea/indexLayout.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/.idea.PSCHelpdesk/.idea/projectSettingsUpdater.xml b/.idea/.idea.PSCHelpdesk/.idea/projectSettingsUpdater.xml new file mode 100644 index 0000000..64af657 --- /dev/null +++ b/.idea/.idea.PSCHelpdesk/.idea/projectSettingsUpdater.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/.idea/.idea.PSCHelpdesk/.idea/vcs.xml b/.idea/.idea.PSCHelpdesk/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/.idea.PSCHelpdesk/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/.idea.PSCHelpdesk/.idea/workspace.xml b/.idea/.idea.PSCHelpdesk/.idea/workspace.xml new file mode 100644 index 0000000..c7a52dc --- /dev/null +++ b/.idea/.idea.PSCHelpdesk/.idea/workspace.xml @@ -0,0 +1,324 @@ + + + + PSCHelpdesk/PSCHelpdesk.Android/PSCHelpdesk.Android.csproj + PSCHelpdesk/PSCHelpdesk.Browser/PSCHelpdesk.Browser.csproj + PSCHelpdesk/PSCHelpdesk.Desktop/PSCHelpdesk.Desktop.csproj + PSCHelpdesk/PSCHelpdesk.iOS/PSCHelpdesk.iOS.csproj + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { + "customColor": "", + "associatedIndex": 8 +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1730307678241 + + + + + + + + + + + + + file://$PROJECT_DIR$/PSCHelpdesk/PSCHelpdesk/ViewModels/MainWindowViewModel.cs + 86 + + + + + + + + + file://$PROJECT_DIR$/PSCHelpdesk/PSCHelpdesk/ViewModels/MainWindowViewModel.cs + 83 + + + + + + + + + file://$PROJECT_DIR$/PSCHelpdesk/PSCHelpdesk/ViewModels/MainWindowViewModel.cs + 84 + + + + + + + + + file://$PROJECT_DIR$/PSCHelpdesk/PSCHelpdesk/Views/ContentDisplay.axaml.cs + 71 + + + + + + + + + file://$PROJECT_DIR$/PSCHelpdesk/PSCHelpdesk/Views/ContentDisplay.axaml.cs + 37 + + + + + + + + + file://$PROJECT_DIR$/PSCHelpdesk/PSCHelpdesk/ViewModels/MainWindowViewModel.cs + 48 + + + + + + + + + + + \ No newline at end of file diff --git a/HetznerServer/HetznerServer.cs b/HetznerServer/HetznerServer.cs new file mode 100644 index 0000000..5ede775 --- /dev/null +++ b/HetznerServer/HetznerServer.cs @@ -0,0 +1,29 @@ +using Prise.Plugin; +using PSCHelpdesk.Plugins.HetznerServer.ViewModels; +using PSCHelpdesk.Plugins.HetznerServer.Views; +using PSCHelpdesk.Shared.Menu; +using PSCHelpdesk.Shared.Plugin; + +namespace PSCHelpdesk.Plugins.HetznerServer; + +[Plugin(PluginType = typeof(Contract))] +public class HetznerServer : Contract +{ + public string GetName() + { + return "HetznerServerPlugin"; + } + + public async Task> addMenu() + { + var list = new List(); + var serverTab = new Item() + { + Header = "Server", + CommandParameter = typeof(ServerViewModel), + }; + list.Add(serverTab); + return list; + + } +} \ No newline at end of file diff --git a/HetznerServer/HetznerServer.csproj b/HetznerServer/HetznerServer.csproj new file mode 100644 index 0000000..6180a2f --- /dev/null +++ b/HetznerServer/HetznerServer.csproj @@ -0,0 +1,46 @@ + + + + net9.0 + enable + enable + PSCHelpdesk.Plugins.HetznerServer + + + + portable + + + + + ServerView.axaml + Code + + + + + + + + + + ..\..\..\.nuget\packages\avalonia\11.2.0\ref\net8.0\Avalonia.Controls.dll + + + ..\..\..\.nuget\packages\avalonia.controls.datagrid\11.2.0\lib\net8.0\Avalonia.Controls.DataGrid.dll + + + ..\..\..\.nuget\packages\communitytoolkit.mvvm\8.2.1\lib\net6.0\CommunityToolkit.Mvvm.dll + + + + + + + + + + + + + diff --git a/HetznerServer/HetznerServerBootstrap.cs b/HetznerServer/HetznerServerBootstrap.cs new file mode 100644 index 0000000..85eba2c --- /dev/null +++ b/HetznerServer/HetznerServerBootstrap.cs @@ -0,0 +1,17 @@ +using PSCHelpdesk.Plugins.HetznerServer.ViewModels; + +namespace PSCHelpdesk.Plugins.HetznerServer; + +using Microsoft.Extensions.DependencyInjection; +using Prise.Plugin; + + +[PluginBootstrapper(PluginType = typeof(HetznerServer))] +public class HetznerServerBootstrap : IPluginBootstrapper +{ + public IServiceCollection Bootstrap(IServiceCollection services) + { + services.AddTransient(); + return services; + } +} diff --git a/HetznerServer/Models/Server.cs b/HetznerServer/Models/Server.cs new file mode 100644 index 0000000..12e0867 --- /dev/null +++ b/HetznerServer/Models/Server.cs @@ -0,0 +1,34 @@ +using System.Collections.Generic; +using System.ComponentModel; +using System.Runtime.CompilerServices; + +namespace PSCHelpdesk.Plugins.HetznerServer.Models; + +public class Server: INotifyPropertyChanged +{ + public long Id { get; set; } + public string Name { get; set; } + + public string Status { get; set; } + + public string Type { get; set; } + public string Ipv4 { get; set; } + public string Ipv6 { get; set; } + + public Server(long id, string name, string type, string status, string ipv4, string ipv6) + { + Id = id; + Name = name; + Type = type; + Status = status; + Ipv4 = ipv4; + Ipv6 = ipv6; + } + + public event PropertyChangedEventHandler? PropertyChanged; + + protected virtual void OnPropertyChanged(string propertyName = "") + { + PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); + } +} \ No newline at end of file diff --git a/HetznerServer/ViewModels/ServerViewModel.cs b/HetznerServer/ViewModels/ServerViewModel.cs new file mode 100644 index 0000000..ad5d5c4 --- /dev/null +++ b/HetznerServer/ViewModels/ServerViewModel.cs @@ -0,0 +1,89 @@ +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Diagnostics; +using System.Threading.Tasks; +using Avalonia.Controls; +using CommunityToolkit.Mvvm.ComponentModel; +using CommunityToolkit.Mvvm.Input; +using HetznerCloudApi; +using PSCHelpdesk.Plugins.HetznerServer.Models; +using PSCHelpdesk.Plugins.HetznerServer.Views; +using PSCHelpdesk.Shared.ViewModels; + +namespace PSCHelpdesk.Plugins.HetznerServer.ViewModels; + +public partial class ServerViewModel : ViewModelBase +{ + public ServerViewModel() + { + Server = new ObservableCollection(); + SelectedServer = new Server(1,"","","","",""); + loadServers(); + + } + + private bool _isPagePaneOpen = false; + 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() + { + HetznerCloudClient hetznerCloudClient = new HetznerCloudClient("kcsTOjNw7YxiOGVaIrk33gIYIHmLRov9Ap6BgWxQZVJyzSsmeNpClMhpJZUYCL0k"); + + 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]; + } + + [RelayCommand] + public void ShowServerDetails(Server server) + { + + } + + [RelayCommand] + public void OpenSCP(Server server) + { + + } + + [RelayCommand] + public void OpenSSH(Server server) + { + /*LocalSetting setting = JsonSettings.Load(); + Process.Start(string.Format(setting.SSHClientExecutable, server.Ipv4));*/ + } + + [RelayCommand] + public void SelectionChanged(SelectionChangedEventArgs args) + { + this.SelectedServer = (args.Source as DataGrid).SelectedItem as Server; + IsPagePaneOpen = true; + } + + public UserControl GetViewControl() + { + return new ServerView(); + } +} \ No newline at end of file diff --git a/HetznerServer/Views/ServerView.axaml b/HetznerServer/Views/ServerView.axaml new file mode 100644 index 0000000..230a89f --- /dev/null +++ b/HetznerServer/Views/ServerView.axaml @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + +