diff --git a/.idea/.idea.PSCHelpdesk/.idea/riderPublish.xml b/.idea/.idea.PSCHelpdesk/.idea/riderPublish.xml index 9ef50fe..4dbd2c2 100644 --- a/.idea/.idea.PSCHelpdesk/.idea/riderPublish.xml +++ b/.idea/.idea.PSCHelpdesk/.idea/riderPublish.xml @@ -8,6 +8,7 @@ diff --git a/.idea/.idea.PSCHelpdesk/.idea/workspace.xml b/.idea/.idea.PSCHelpdesk/.idea/workspace.xml index 49e5564..678916a 100644 --- a/.idea/.idea.PSCHelpdesk/.idea/workspace.xml +++ b/.idea/.idea.PSCHelpdesk/.idea/workspace.xml @@ -11,18 +11,18 @@ + - - + + - - - - - + + + + @@ -40,17 +40,12 @@ + - - - - - - - + @@ -83,42 +78,54 @@ - { - "keyToString": { - ".NET Project.PSCHelpdesk.Desktop ohne plugin.executor": "Run", - ".NET Project.PSCHelpdesk.Desktop.executor": "Run", - "Publish to folder.Build HetznerServer Plugin Debug.executor": "Run", - "Publish to folder.Copy Hetzner Target.executor": "Run", - "Publish to folder.Copy NextCloud Target.executor": "Run", - "Publish to folder.Publish HetznerServer to folder.executor": "Run", - "Publish to folder.Publish NextCloud to folder.executor": "Run", - "Publish to folder.Publish Nextcloud to folder.executor": "Run", - "RunOnceActivity.ShowReadmeOnStart": "true", - "XThreadsFramesViewSplitterKey": "0.4427131", - "git-widget-placeholder": "master", - "ignore.virus.scanning.warn.message": "true", - "last_opened_file_path": "/home/thomas/RiderProjects/PSCHelpdesk/PSCHelpdesk/PSCHelpdesk.Desktop/bin/Debug/net9.0/plugins", - "node.js.detected.package.eslint": "true", - "node.js.detected.package.tslint": "true", - "node.js.selected.package.eslint": "(autodetect)", - "node.js.selected.package.tslint": "(autodetect)", - "nodejs_package_manager_path": "npm", - "settings.editor.selected.configurable": "SolutionBuilderGeneralOptionsPage", - "vue.rearranger.settings.migration": "true" + +}]]> - - + + - - + + + + + + + + + + @@ -174,8 +181,12 @@ @@ -201,8 +212,10 @@ - - + + + + @@ -229,6 +242,7 @@ + @@ -364,6 +378,32 @@ diff --git a/FastBill/FastBill.cs b/FastBill/FastBill.cs index eb8ffdb..b07aa51 100644 --- a/FastBill/FastBill.cs +++ b/FastBill/FastBill.cs @@ -1,4 +1,9 @@ -using PSCHelpdesk.Shared.Plugin; +using CommunityToolkit.Mvvm.DependencyInjection; +using FastBill.ViewModels; +using FastBill.Views; +using PSCHelpdesk.Shared.Plugin; +using PSCHelpdesk.Shared.Service; +using PSCHelpdesk.Shared.Setting; namespace FastBill; @@ -11,11 +16,17 @@ public class FastBill: Contract public void Configure() { - + var settingsService = Ioc.Default.GetRequiredService(); + var fastbillSettings = new Item() + { + Header = "Fastbill", + CommandParameter = new SettingsViewModel() + }; + settingsService.AddSetting(fastbillSettings); } public List LoadViews() { - return new List(); + return [typeof(SettingsView)]; } } \ No newline at end of file diff --git a/FastBill/FastBill.csproj b/FastBill/FastBill.csproj index 1e5c9f9..52945f5 100644 --- a/FastBill/FastBill.csproj +++ b/FastBill/FastBill.csproj @@ -10,4 +10,9 @@ + + + + + diff --git a/FastBill/Models/Settings.cs b/FastBill/Models/Settings.cs new file mode 100644 index 0000000..5f04016 --- /dev/null +++ b/FastBill/Models/Settings.cs @@ -0,0 +1,7 @@ +namespace FastBill.Models; + +public class Settings +{ + public string EMail { get; set; } = string.Empty; + public string ApiKey { get; set; } = string.Empty; +} \ No newline at end of file diff --git a/FastBill/ViewModels/SettingsViewModel.cs b/FastBill/ViewModels/SettingsViewModel.cs new file mode 100644 index 0000000..4e6e392 --- /dev/null +++ b/FastBill/ViewModels/SettingsViewModel.cs @@ -0,0 +1,56 @@ +using System.Reactive; +using CommunityToolkit.Mvvm.DependencyInjection; +using FastBill.Models; +using PSCHelpdesk.Shared.Service; +using PSCHelpdesk.Shared.Setting; +using PSCHelpdesk.Shared.ViewModels; +using ReactiveUI; + +namespace FastBill.ViewModels; + +public class SettingsViewModel: ViewModelBase, IViewModelBase +{ + private string _email; + private string _apiKey; + private Settings _settings; + + public ReactiveCommand SaveSettings { get; } + + public string EMail + { + get => _email; + set => SetAndRaisePropertyChanged(ref _email, value); + } + public string ApiKey + { + get => _apiKey; + set => SetAndRaisePropertyChanged(ref _apiKey, value); + } + + public Settings Settings + { + get => _settings; + set => SetAndRaisePropertyChanged(ref _settings, value); + } + + public SettingsViewModel() + { + Settings = new Settings(); + var settingsManager = (SettingsManager)Ioc.Default.GetService(); + var _set = new Settings(); + settingsManager.LoadPluginSettings("FastbillSettings", _set); + + Settings.EMail = _set.EMail; + Settings.ApiKey = _set.ApiKey; + + SaveSettings = ReactiveCommand.Create(saveSettings); + } + + void saveSettings() + { + var settingsManager = (SettingsManager)Ioc.Default.GetService(); + settingsManager.SavePluginSettings("FastbillSettings", Settings); + + } + +} \ No newline at end of file diff --git a/FastBill/Views/SettingsView.axaml b/FastBill/Views/SettingsView.axaml new file mode 100644 index 0000000..506f9e5 --- /dev/null +++ b/FastBill/Views/SettingsView.axaml @@ -0,0 +1,23 @@ + + + + + + + UserName + + + + AppKey + + + + + diff --git a/FastBill/Views/SettingsView.axaml.cs b/FastBill/Views/SettingsView.axaml.cs new file mode 100644 index 0000000..1a13b86 --- /dev/null +++ b/FastBill/Views/SettingsView.axaml.cs @@ -0,0 +1,13 @@ +using Avalonia; +using Avalonia.Controls; +using Avalonia.Markup.Xaml; + +namespace FastBill.Views; + +public partial class SettingsView : UserControl +{ + public SettingsView() + { + InitializeComponent(); + } +} \ No newline at end of file diff --git a/HetznerServer/Models/Server.cs b/HetznerServer/Models/Server.cs index 3b195cb..e15148a 100644 --- a/HetznerServer/Models/Server.cs +++ b/HetznerServer/Models/Server.cs @@ -11,12 +11,28 @@ public class Server : ReactiveObject { public long Id { get; set; } public string Name { get; set; } + + private string _pscApiKey; + + public string PscApiKey + { + get => _pscApiKey; + set => this.RaiseAndSetIfChanged(ref _pscApiKey, value); + } + + private string _fastBillId; + + public string FastBillId + { + get => _fastBillId; + set => this.RaiseAndSetIfChanged(ref _fastBillId, value); + } public string Status { get; set; } - private string _isGoodIcon = MaterialIconKind.AlertCircleOutline.ToString(); + private MaterialIconKind _isGoodIcon = MaterialIconKind.AlertCircleOutline; - public string IsGoodIcon + public MaterialIconKind IsGoodIcon { get => _isGoodIcon; set => this.RaiseAndSetIfChanged(ref _isGoodIcon, value); diff --git a/HetznerServer/Service/ServerService.cs b/HetznerServer/Service/ServerService.cs index c3535d7..d9d9236 100644 --- a/HetznerServer/Service/ServerService.cs +++ b/HetznerServer/Service/ServerService.cs @@ -1,10 +1,12 @@ using System.Collections.ObjectModel; using System.Net.Http.Headers; +using Avalonia.Media; using Avalonia.Threading; using CommunityToolkit.Mvvm.DependencyInjection; using DynamicData; using DynamicData.Binding; using HetznerCloudApi; +using Material.Icons; using Newtonsoft.Json.Linq; using PSCHelpdesk.Plugins.HetznerServer.Models; using PSCHelpdesk.Shared.Service; @@ -164,6 +166,9 @@ public class ServerService: IServerService } } + serv.IsGoodIcon = MaterialIconKind.Check; + serv.IsGoodColor = Brushes.Green; + client.Disconnect(); _toastManager.DisplayNewToast("Server " + serv.Name + " finished"); } diff --git a/HetznerServer/ViewModels/ServerViewModel.cs b/HetznerServer/ViewModels/ServerViewModel.cs index f1d522a..613b7b9 100644 --- a/HetznerServer/ViewModels/ServerViewModel.cs +++ b/HetznerServer/ViewModels/ServerViewModel.cs @@ -22,6 +22,7 @@ public partial class ServerViewModel : ViewModelBase, IViewModelBase { public readonly ServerService ServerService; public ReactiveCommand SelectionChanged { get; } + public ReactiveCommand SaveServerSettings { get; } protected readonly ReadOnlyObservableCollection _server; public ReadOnlyObservableCollection Server => _server; @@ -31,6 +32,7 @@ public partial class ServerViewModel : ViewModelBase, IViewModelBase { SelectedServer = new Server(1,"","","","",""); SelectionChanged = ReactiveCommand.Create(selectionChanged); + SaveServerSettings = ReactiveCommand.Create(saveServerSettings); _settingsManager = (SettingsManager)Ioc.Default.GetService(); ServerService = _serverService; ServerService.SourceCache.Connect() @@ -92,4 +94,9 @@ public partial class ServerViewModel : ViewModelBase, IViewModelBase { return new ServerView(); } + + void saveServerSettings() + { + + } } \ No newline at end of file diff --git a/HetznerServer/Views/ServerDetailView.axaml b/HetznerServer/Views/ServerDetailView.axaml new file mode 100644 index 0000000..e3b2c40 --- /dev/null +++ b/HetznerServer/Views/ServerDetailView.axaml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/HetznerServer/Views/ServerDetailView.axaml.cs b/HetznerServer/Views/ServerDetailView.axaml.cs new file mode 100644 index 0000000..3b3036e --- /dev/null +++ b/HetznerServer/Views/ServerDetailView.axaml.cs @@ -0,0 +1,13 @@ +using Avalonia; +using Avalonia.Controls; +using Avalonia.Markup.Xaml; + +namespace PSCHelpdesk.Plugins.HetznerServer.Views; + +public partial class ServerDetailView : UserControl +{ + public ServerDetailView() + { + InitializeComponent(); + } +} \ No newline at end of file diff --git a/HetznerServer/Views/ServerView.axaml b/HetznerServer/Views/ServerView.axaml index a275372..e871780 100644 --- a/HetznerServer/Views/ServerView.axaml +++ b/HetznerServer/Views/ServerView.axaml @@ -7,6 +7,7 @@ xmlns:converter="clr-namespace:PSCHelpdesk.Plugins.HetznerServer.Converter" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" x:Class="PSCHelpdesk.Plugins.HetznerServer.Views.ServerView" + xmlns:v="clr-namespace:PSCHelpdesk.Plugins.HetznerServer.Views" x:DataType="vm:ServerViewModel" Name="Servers"> @@ -96,22 +97,7 @@ - - - - - - - - - - - - - - + diff --git a/PSCHelpdesk.sln.DotSettings.user b/PSCHelpdesk.sln.DotSettings.user index de79d68..7627a2f 100644 --- a/PSCHelpdesk.sln.DotSettings.user +++ b/PSCHelpdesk.sln.DotSettings.user @@ -1,4 +1,5 @@  + ForceIncluded ForceIncluded ForceIncluded ForceIncluded diff --git a/PSCHelpdesk/PSCHelpdesk/Services/PluginManager.cs b/PSCHelpdesk/PSCHelpdesk/Services/PluginManager.cs index d5e9669..6cb5031 100644 --- a/PSCHelpdesk/PSCHelpdesk/Services/PluginManager.cs +++ b/PSCHelpdesk/PSCHelpdesk/Services/PluginManager.cs @@ -14,6 +14,12 @@ public class PluginManager private List _pluginTypes; + private Dictionary foundPlugins = new Dictionary(); + + public Dictionary GetPlugins() + { + return this.foundPlugins; + } public PluginManager() { @@ -51,6 +57,7 @@ public class PluginManager if (pluginType.IsAssignableFrom(type)) { pluginTypes.Add(type); + this.foundPlugins.Add(Path.GetFileNameWithoutExtension(assembly.FullName), assembly.Location); } } diff --git a/PSCHelpdesk/PSCHelpdesk/ViewModels/MainWindowViewModel.cs b/PSCHelpdesk/PSCHelpdesk/ViewModels/MainWindowViewModel.cs index 7f266c6..3b7be6e 100644 --- a/PSCHelpdesk/PSCHelpdesk/ViewModels/MainWindowViewModel.cs +++ b/PSCHelpdesk/PSCHelpdesk/ViewModels/MainWindowViewModel.cs @@ -25,6 +25,9 @@ public class MainWindowViewModel : ViewModelBase, IViewModelBase private bool _isReconnecting; public ReactiveCommand ClickMenu { get; } + + public ReactiveCommand OpenPlugins { get; } + private ObservableCollection _tabItems; private TabItemViewModel _selectedTabItem; public ObservableCollection TabItems @@ -55,6 +58,7 @@ public class MainWindowViewModel : ViewModelBase, IViewModelBase IsReconnecting = true; Startup.RegisterServices(); ClickMenu = ReactiveCommand.Create(SelectMenu); + OpenPlugins = ReactiveCommand.Create(openPlugins); TabItems = new ObservableCollection(); this.MenuItems = new List(); MenuService = (MenuService)Ioc.Default.GetService(typeof(IMenuService)); @@ -115,5 +119,13 @@ public class MainWindowViewModel : ViewModelBase, IViewModelBase } } } + + void openPlugins() + { + if (TabItems.Count(x => x.Header == "Plugins") == 0) + TabItems.Add(new TabItemViewModel("Plugins", + new PluginListViewModel(Ioc.Default.GetService()))); + SelectedTabItem = TabItems.Last(); + } } \ No newline at end of file diff --git a/PSCHelpdesk/PSCHelpdesk/ViewModels/PluginListViewModel.cs b/PSCHelpdesk/PSCHelpdesk/ViewModels/PluginListViewModel.cs index 9020b83..5b325fb 100644 --- a/PSCHelpdesk/PSCHelpdesk/ViewModels/PluginListViewModel.cs +++ b/PSCHelpdesk/PSCHelpdesk/ViewModels/PluginListViewModel.cs @@ -24,12 +24,10 @@ class PluginListViewModel : ViewModelBase, IViewModelBase LoadAllPluginsCommand = new RelayCommand(LoadAllPlugins); UnLoadAllPluginsCommand = new RelayCommand(UnLoadAllPlugins); - /*foreach (var plugin in pluginService.GetPlugins()) + foreach (var plugin in pluginService.GetPlugins()) { this.Plugins.Add(plugin.Key); - }*/ - - //this._pluginService = pluginService; + } } async void LoadPlugin(object parameter) diff --git a/PSCHelpdesk/PSCHelpdesk/Views/MainWindow.axaml b/PSCHelpdesk/PSCHelpdesk/Views/MainWindow.axaml index 1abb7df..f5e31ec 100644 --- a/PSCHelpdesk/PSCHelpdesk/Views/MainWindow.axaml +++ b/PSCHelpdesk/PSCHelpdesk/Views/MainWindow.axaml @@ -30,6 +30,9 @@ + + + diff --git a/_dist/hetzner/HetznerServer.dll b/_dist/hetzner/HetznerServer.dll index 7507d62..3594c77 100644 Binary files a/_dist/hetzner/HetznerServer.dll and b/_dist/hetzner/HetznerServer.dll differ diff --git a/_dist/hetzner/HetznerServer.pdb b/_dist/hetzner/HetznerServer.pdb index 3abe40f..0cbd355 100644 Binary files a/_dist/hetzner/HetznerServer.pdb and b/_dist/hetzner/HetznerServer.pdb differ diff --git a/_dist/nextcloud/Nextcloud.dll b/_dist/nextcloud/Nextcloud.dll index 3693d6b..1fa624f 100644 Binary files a/_dist/nextcloud/Nextcloud.dll and b/_dist/nextcloud/Nextcloud.dll differ diff --git a/_dist/nextcloud/Nextcloud.pdb b/_dist/nextcloud/Nextcloud.pdb index 7d42a69..e2f1d4f 100644 Binary files a/_dist/nextcloud/Nextcloud.pdb and b/_dist/nextcloud/Nextcloud.pdb differ