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 @@
+
+ file://$PROJECT_DIR$/PSCHelpdesk/PSCHelpdesk/ViewModels/MainWindowViewModel.cs
+ 125
+
+
+
+
+
+
+
+
+
+
+
+ file://$PROJECT_DIR$/FastBill/FastBill.cs
+ 18
+
+
+
+
+
+
+
+
+
+
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