From 6434ec06e1ab190859ca9d50c4b9d84bcee433c9 Mon Sep 17 00:00:00 2001 From: Thomas Peterson Date: Thu, 7 Nov 2024 19:22:50 +0100 Subject: [PATCH] Backup --- .idea/.idea.PSCHelpdesk/.idea/avalonia.xml | 2 +- .idea/.idea.PSCHelpdesk/.idea/workspace.xml | 74 +++++++++++++------ HetznerServer/DataTemplate/ServerView.axaml | 6 ++ .../DataTemplate/ServerView.axaml.cs | 9 +++ HetznerServer/HetznerServer.cs | 4 +- HetznerServer/ViewModels/ServerViewModel.cs | 46 ++++++------ HetznerServer/Views/ServerView.axaml | 15 ++-- HetznerServer/Views/ServerView.axaml.cs | 3 + PSCHelpdesk.sln.DotSettings.user | 2 + PSCHelpdesk/PSCHelpdesk/PSCHelpdesk.csproj | 2 +- .../PSCHelpdesk/Services/PluginService.cs | 7 +- PSCHelpdesk/PSCHelpdesk/ViewLocator.cs | 3 +- .../ViewModels/MainWindowViewModel.cs | 66 +++++++---------- .../ViewModels/TabItemViewModel.cs | 14 ++++ .../PSCHelpdesk/Views/ContentDisplay.axaml.cs | 1 + .../PSCHelpdesk/Views/MainWindow.axaml | 60 +++++++++------ .../PSCHelpdesk/Views/MainWindow.axaml.cs | 1 - Shared/Plugin/Contract.cs | 2 +- 18 files changed, 190 insertions(+), 127 deletions(-) create mode 100644 HetznerServer/DataTemplate/ServerView.axaml create mode 100644 HetznerServer/DataTemplate/ServerView.axaml.cs create mode 100644 PSCHelpdesk/PSCHelpdesk/ViewModels/TabItemViewModel.cs diff --git a/.idea/.idea.PSCHelpdesk/.idea/avalonia.xml b/.idea/.idea.PSCHelpdesk/.idea/avalonia.xml index e15ef08..fdb6bad 100644 --- a/.idea/.idea.PSCHelpdesk/.idea/avalonia.xml +++ b/.idea/.idea.PSCHelpdesk/.idea/avalonia.xml @@ -9,7 +9,7 @@ - + diff --git a/.idea/.idea.PSCHelpdesk/.idea/workspace.xml b/.idea/.idea.PSCHelpdesk/.idea/workspace.xml index a5e55b8..2d0e715 100644 --- a/.idea/.idea.PSCHelpdesk/.idea/workspace.xml +++ b/.idea/.idea.PSCHelpdesk/.idea/workspace.xml @@ -11,29 +11,21 @@ - + - - - + - - + + - - + - - - - - - - + + + + - + + - + + + + + + @@ -82,7 +82,7 @@ - file://$PROJECT_DIR$/HetznerServer/ViewModels/ServerViewModel.cs - 77 - + file://$PROJECT_DIR$/PSCHelpdesk/PSCHelpdesk/Views/ContentDisplay.axaml.cs + 91 + - - - + + file://$PROJECT_DIR$/PSCHelpdesk/PSCHelpdesk/Views/ContentDisplay.axaml.cs + 80 + + + + + + + + + file://$PROJECT_DIR$/HetznerServer/ViewModels/ServerViewModel.cs + 82 + + + + + + + diff --git a/HetznerServer/DataTemplate/ServerView.axaml b/HetznerServer/DataTemplate/ServerView.axaml new file mode 100644 index 0000000..e29dceb --- /dev/null +++ b/HetznerServer/DataTemplate/ServerView.axaml @@ -0,0 +1,6 @@ + + + + + diff --git a/HetznerServer/DataTemplate/ServerView.axaml.cs b/HetznerServer/DataTemplate/ServerView.axaml.cs new file mode 100644 index 0000000..de522b4 --- /dev/null +++ b/HetznerServer/DataTemplate/ServerView.axaml.cs @@ -0,0 +1,9 @@ +using Avalonia; +using Avalonia.Controls; +using Avalonia.Controls.Primitives; + +namespace PSCHelpdesk.Plugins.HetznerServer.DataTemplate; + +public class ServerView : TemplatedControl +{ +} \ No newline at end of file diff --git a/HetznerServer/HetznerServer.cs b/HetznerServer/HetznerServer.cs index 7b07e20..1c106a4 100644 --- a/HetznerServer/HetznerServer.cs +++ b/HetznerServer/HetznerServer.cs @@ -37,9 +37,9 @@ public class HetznerServer : Contract settingsService.AddSetting(hetznerSettings); } - public List LoadViews() + public List LoadViews() { - return [new ServerView(), new HetznerSettingsView()]; + return [typeof(ServerView), typeof(HetznerSettingsView)]; } } \ No newline at end of file diff --git a/HetznerServer/ViewModels/ServerViewModel.cs b/HetznerServer/ViewModels/ServerViewModel.cs index 56b71b0..f9c2584 100644 --- a/HetznerServer/ViewModels/ServerViewModel.cs +++ b/HetznerServer/ViewModels/ServerViewModel.cs @@ -1,5 +1,6 @@ using System.Collections.ObjectModel; using System.Diagnostics; +using System.Reactive; using Avalonia.Controls; using CommunityToolkit.Mvvm.DependencyInjection; using CommunityToolkit.Mvvm.Input; @@ -9,14 +10,20 @@ 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(); @@ -24,7 +31,7 @@ public partial class ServerViewModel : ViewModelBase, IViewModelBase } - private bool _isPagePaneOpen = false; + private bool _isPagePaneOpen = true; public bool IsPagePaneOpen { get => _isPagePaneOpen; @@ -49,37 +56,34 @@ public partial class ServerViewModel : ViewModelBase, IViewModelBase { var settings = new Settings(); _settingsManager.LoadPluginSettings("HetznerSettings", settings); - HetznerCloudClient hetznerCloudClient = new HetznerCloudClient(settings.HetznerApiKey); - - List list = await hetznerCloudClient.Server.Get(); - foreach (var server in list) + if (settings.HetznerApiKey != "") { - Server.Add(new Server(server.Id, server.Name, server.ServerType.Name, server.Status, server.PublicNet.Ipv4.Ip, server.PublicNet.Ipv6.Ip)); + 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]; } - - SelectedServer = Server[0]; } - [RelayCommand] - public void ShowServerDetails(Server server) + + + void openSSH(Server server) { - + //Process.Start(_settingsManager.CoreSettings.SSHClientExecutable,string.Format(_settingsManager.CoreSettings.SSHClientExecutableArgs, server.Ipv4)); } - [RelayCommand] - public void OpenSCP(Server server) - { - - } - - [RelayCommand] - public void OpenSSH(Server server) + public void RunTheThing(Server server) { Process.Start(_settingsManager.CoreSettings.SSHClientExecutable,string.Format(_settingsManager.CoreSettings.SSHClientExecutableArgs, server.Ipv4)); } - [RelayCommand] - public void SelectionChanged(SelectionChangedEventArgs args) + void selectionChanged(SelectionChangedEventArgs args) { this.SelectedServer = (args.Source as DataGrid).SelectedItem as Server; IsPagePaneOpen = true; diff --git a/HetznerServer/Views/ServerView.axaml b/HetznerServer/Views/ServerView.axaml index 0bbb8f3..68164d8 100644 --- a/HetznerServer/Views/ServerView.axaml +++ b/HetznerServer/Views/ServerView.axaml @@ -5,21 +5,22 @@ xmlns:vm="clr-namespace:PSCHelpdesk.Plugins.HetznerServer.ViewModels" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" x:Class="PSCHelpdesk.Plugins.HetznerServer.Views.ServerView" - x:DataType="vm:ServerViewModel"> + x:DataType="vm:ServerViewModel" + Name="Servers"> - + x:Name="ServerTable"> - + @@ -36,7 +37,7 @@ HorizontalAlignment="Center" HorizontalContentAlignment="Center" Background="#232323" - Command="{Binding #ServerTable.((vm:ServerViewModel)DataContext).ShowServerDetails}" + Command="{Binding ShowServerDetails}" CommandParameter="{Binding .}" Content="View" Foreground="White" /> @@ -50,7 +51,7 @@ HorizontalAlignment="Center" HorizontalContentAlignment="Center" Background="#232323" - Command="{Binding #ServerTable.((vm:ServerViewModel)DataContext).OpenSSH}" + Command="{Binding Path=$parent[DataGrid].((vm:ServerViewModel)DataContext).OpenSSH}" CommandParameter="{Binding .}" Content="Open SSH" Foreground="White" /> @@ -64,7 +65,7 @@ HorizontalAlignment="Center" HorizontalContentAlignment="Center" Background="#232323" - Command="{Binding #ServerTable.((vm:ServerViewModel)DataContext).OpenSCP}" + Command="{Binding #ServerTable.((vm:ServerViewModel)DataContext).OpenSSH}" CommandParameter="{Binding .}" Content="Open SCP" Foreground="White" /> diff --git a/HetznerServer/Views/ServerView.axaml.cs b/HetznerServer/Views/ServerView.axaml.cs index fce348b..2a6a999 100644 --- a/HetznerServer/Views/ServerView.axaml.cs +++ b/HetznerServer/Views/ServerView.axaml.cs @@ -1,4 +1,5 @@ using Avalonia.Controls; +using PSCHelpdesk.Plugins.HetznerServer.ViewModels; namespace PSCHelpdesk.Plugins.HetznerServer.Views; @@ -7,5 +8,7 @@ public partial class ServerView : UserControl public ServerView() { InitializeComponent(); + + this.DataContext = new ServerViewModel(); } } \ No newline at end of file diff --git a/PSCHelpdesk.sln.DotSettings.user b/PSCHelpdesk.sln.DotSettings.user index 06a4058..e9046f7 100644 --- a/PSCHelpdesk.sln.DotSettings.user +++ b/PSCHelpdesk.sln.DotSettings.user @@ -5,6 +5,7 @@ ForceIncluded ForceIncluded ForceIncluded + ForceIncluded ForceIncluded ForceIncluded ForceIncluded @@ -33,6 +34,7 @@ ForceIncluded ForceIncluded ForceIncluded + ForceIncluded ForceIncluded ForceIncluded ForceIncluded diff --git a/PSCHelpdesk/PSCHelpdesk/PSCHelpdesk.csproj b/PSCHelpdesk/PSCHelpdesk/PSCHelpdesk.csproj index 5e27e9e..8b26672 100644 --- a/PSCHelpdesk/PSCHelpdesk/PSCHelpdesk.csproj +++ b/PSCHelpdesk/PSCHelpdesk/PSCHelpdesk.csproj @@ -49,6 +49,6 @@ - + diff --git a/PSCHelpdesk/PSCHelpdesk/Services/PluginService.cs b/PSCHelpdesk/PSCHelpdesk/Services/PluginService.cs index e380428..1808dcc 100644 --- a/PSCHelpdesk/PSCHelpdesk/Services/PluginService.cs +++ b/PSCHelpdesk/PSCHelpdesk/Services/PluginService.cs @@ -1,3 +1,4 @@ +using System; using System.Linq; using Avalonia.Controls; using CommunityToolkit.Mvvm.DependencyInjection; @@ -19,7 +20,7 @@ public class PluginService private List toLoadPlugins = new List(); private Dictionary loadedPlugins = new Dictionary(); private Dictionary foundPlugins = new Dictionary(); - private Dictionary controls = new Dictionary(); + private Dictionary controls = new Dictionary(); public PluginService() { @@ -94,7 +95,7 @@ public class PluginService var items = plugin.LoadViews(); foreach (var item in items) { - this.controls.Add(item.GetType().FullName, item); + this.controls.Add(item.FullName, item); } appService.AppIsStarted(); @@ -104,7 +105,7 @@ public class PluginService public UserControl GetView(string viewName) { - return this.controls[viewName]; + return (UserControl)Activator.CreateInstance(this.controls[viewName]); } public bool ViewExists(string viewName) diff --git a/PSCHelpdesk/PSCHelpdesk/ViewLocator.cs b/PSCHelpdesk/PSCHelpdesk/ViewLocator.cs index d365e1b..199de2b 100644 --- a/PSCHelpdesk/PSCHelpdesk/ViewLocator.cs +++ b/PSCHelpdesk/PSCHelpdesk/ViewLocator.cs @@ -27,7 +27,8 @@ public class ViewLocator : IDataTemplate if (_pluginService.ViewExists(name)) { - return _pluginService.GetView(name); + var v = _pluginService.GetView(name); + return v; } if (type != null) diff --git a/PSCHelpdesk/PSCHelpdesk/ViewModels/MainWindowViewModel.cs b/PSCHelpdesk/PSCHelpdesk/ViewModels/MainWindowViewModel.cs index 5b4ee70..ae81087 100644 --- a/PSCHelpdesk/PSCHelpdesk/ViewModels/MainWindowViewModel.cs +++ b/PSCHelpdesk/PSCHelpdesk/ViewModels/MainWindowViewModel.cs @@ -1,7 +1,9 @@ using System; using System.Collections.Generic; +using System.Collections.ObjectModel; using System.Linq; using System.Reactive; +using Avalonia.Controls; using CommunityToolkit.Mvvm.DependencyInjection; using PSCHelpdesk.Services; using PSCHelpdesk.Shared.Menu; @@ -11,38 +13,34 @@ using ReactiveUI; namespace PSCHelpdesk.ViewModels; -public class MainWindowViewModel : ViewModelBase +public class MainWindowViewModel : ViewModelBase, IViewModelBase { - private MenuService _menuService; + private MenuService MenuService; public ReactiveCommand ClickMenu { get; } - public MenuService MenuService + private ObservableCollection _tabItems; + + public ObservableCollection TabItems { - get => this._menuService; - private set => SetAndRaisePropertyChanged(ref this._menuService, value); + get => _tabItems; + set => SetAndRaisePropertyChanged(ref _tabItems, value); } - private object _contentDisplay; - - private Item _selectedItem; - public Item SelectedItem + private List _menuItems; + public List MenuItems { - get => _selectedItem; - set => SetAndRaisePropertyChanged(ref _selectedItem, value); + get => _menuItems; + set => SetAndRaisePropertyChanged(ref _menuItems, value); } - public object ContentDisplay - { - get => _contentDisplay; - set => SetAndRaisePropertyChanged(ref _contentDisplay, value); - } public MainWindowViewModel() { - ClickMenu = ReactiveCommand.Create(SelectMenu); - this.MenuItems = new List(); Startup.RegisterServices(); - this.MenuService = (MenuService)Ioc.Default.GetService(typeof(IMenuService)); - this.MenuService.MenuChanged += delegate(object? sender, EventArgs args) + ClickMenu = ReactiveCommand.Create(SelectMenu); + TabItems = new ObservableCollection(); + this.MenuItems = new List(); + MenuService = (MenuService)Ioc.Default.GetService(typeof(IMenuService)); + MenuService.MenuChanged += delegate(object? sender, EventArgs args) { foreach (var menuServiceMenuItem in MenuService.MenuItems) { @@ -66,40 +64,26 @@ public class MainWindowViewModel : ViewModelBase this.InitializeClient(); - this.SelectedItem = MenuService.MenuItems.Last(); - this.ContentDisplay = this.SelectedItem.CommandParameter; - + TabItems.Add(new TabItemViewModel("test", new TestViewModel())); + } - private List _menuItems; - public List MenuItems - { - get => _menuItems; - set => SetAndRaisePropertyChanged(ref _menuItems, value); - } - - private void InitializeClient() { this.MenuService.CreateMenu(); } - public object SelectedContent - { - get - { - return this.SelectedItem?.CommandParameter; - } - } - public void SelectMenu(string parameter) { //this.SelectedItem = parameter; var obj = this.MenuService.MenuItems.FirstOrDefault(menuItem => menuItem.Header == parameter.ToString(), null); if (obj != null) { - this.SelectedItem = obj; - this.ContentDisplay = obj.CommandParameter; + TabItems.Add(new TabItemViewModel(obj.Header, obj.CommandParameter)); + //SetAndRaisePropertyChanged(ref _tabItems, TabItems); + //this.SelectedItem = obj; + //this.ContentDisplay = obj.CommandParameter; } } + } \ No newline at end of file diff --git a/PSCHelpdesk/PSCHelpdesk/ViewModels/TabItemViewModel.cs b/PSCHelpdesk/PSCHelpdesk/ViewModels/TabItemViewModel.cs new file mode 100644 index 0000000..8db22d8 --- /dev/null +++ b/PSCHelpdesk/PSCHelpdesk/ViewModels/TabItemViewModel.cs @@ -0,0 +1,14 @@ +using Avalonia.Controls; + +namespace PSCHelpdesk.ViewModels; + +public class TabItemViewModel +{ + public string Header { get; } + public object Content { get; } + public TabItemViewModel(string header, object content) + { + Header = header; + Content = content; + } +} \ No newline at end of file diff --git a/PSCHelpdesk/PSCHelpdesk/Views/ContentDisplay.axaml.cs b/PSCHelpdesk/PSCHelpdesk/Views/ContentDisplay.axaml.cs index 2c0fdb3..7030689 100644 --- a/PSCHelpdesk/PSCHelpdesk/Views/ContentDisplay.axaml.cs +++ b/PSCHelpdesk/PSCHelpdesk/Views/ContentDisplay.axaml.cs @@ -1,4 +1,5 @@ using Avalonia; +using Avalonia.Controls.Presenters; using Avalonia.Controls.Primitives; using Avalonia.Data; using PSCHelpdesk.Shared.Menu; diff --git a/PSCHelpdesk/PSCHelpdesk/Views/MainWindow.axaml b/PSCHelpdesk/PSCHelpdesk/Views/MainWindow.axaml index 4feb929..54c2911 100644 --- a/PSCHelpdesk/PSCHelpdesk/Views/MainWindow.axaml +++ b/PSCHelpdesk/PSCHelpdesk/Views/MainWindow.axaml @@ -11,28 +11,40 @@ x:DataType="vm:MainWindowViewModel" Title="PSCHelpdesk" x:Name="MainWindowView"> - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PSCHelpdesk/PSCHelpdesk/Views/MainWindow.axaml.cs b/PSCHelpdesk/PSCHelpdesk/Views/MainWindow.axaml.cs index 917ed23..852e4e2 100644 --- a/PSCHelpdesk/PSCHelpdesk/Views/MainWindow.axaml.cs +++ b/PSCHelpdesk/PSCHelpdesk/Views/MainWindow.axaml.cs @@ -27,5 +27,4 @@ public partial class MainWindow : Window }; settings.Show(); } - } \ No newline at end of file diff --git a/Shared/Plugin/Contract.cs b/Shared/Plugin/Contract.cs index 02aeb20..39801dd 100644 --- a/Shared/Plugin/Contract.cs +++ b/Shared/Plugin/Contract.cs @@ -10,6 +10,6 @@ public interface Contract void Configure(); - List LoadViews(); + List LoadViews(); } \ No newline at end of file