diff --git a/.idea/.idea.PSCHelpdesk/.idea/.name b/.idea/.idea.PSCHelpdesk/.idea/.name
deleted file mode 100644
index 6f7d947..0000000
--- a/.idea/.idea.PSCHelpdesk/.idea/.name
+++ /dev/null
@@ -1 +0,0 @@
-PSCHelpdesk
\ No newline at end of file
diff --git a/.idea/.idea.PSCHelpdesk/.idea/workspace.xml b/.idea/.idea.PSCHelpdesk/.idea/workspace.xml
index 13b9f93..a5e55b8 100644
--- a/.idea/.idea.PSCHelpdesk/.idea/workspace.xml
+++ b/.idea/.idea.PSCHelpdesk/.idea/workspace.xml
@@ -11,26 +11,29 @@
-
+
-
-
+
+
+
+
+
-
-
+
+
-
-
+
+
+
-
-
+
@@ -44,19 +47,13 @@
-
-
+
-
+
-
-
-
-
-
@@ -200,6 +197,7 @@
+
@@ -239,30 +237,56 @@
- file://$PROJECT_DIR$/PSCHelpdesk/PSCHelpdesk/ViewModels/SettingsViewModel.cs
- 38
-
+ file://$PROJECT_DIR$/Shared/Setting/SettingsManager.cs
+ 85
+
-
+
-
+
-
+
- file://$PROJECT_DIR$/PSCHelpdesk/PSCHelpdesk/ViewModels/SettingsViewModel.cs
- 36
-
+ file://$PROJECT_DIR$/PSCHelpdesk/PSCHelpdesk/Views/SettingsGlobalView.axaml.cs
+ 29
+
-
+
-
+
-
+
+
+
+ file://$PROJECT_DIR$/PSCHelpdesk/PSCHelpdesk/Views/SettingsGlobalView.axaml.cs
+ 32
+
+
+
+
+
+
+
+
+
+
+
+ file://$PROJECT_DIR$/HetznerServer/ViewModels/ServerViewModel.cs
+ 77
+
+
+
+
+
+
+
+
+
diff --git a/HetznerServer/HetznerServer.csproj b/HetznerServer/HetznerServer.csproj
index a1dffd4..4727695 100644
--- a/HetznerServer/HetznerServer.csproj
+++ b/HetznerServer/HetznerServer.csproj
@@ -11,13 +11,6 @@
portable
-
-
- ServerView.axaml
- Code
-
-
-
diff --git a/HetznerServer/Models/ServerSetting.cs b/HetznerServer/Models/ServerSetting.cs
new file mode 100644
index 0000000..fb3e9fa
--- /dev/null
+++ b/HetznerServer/Models/ServerSetting.cs
@@ -0,0 +1,13 @@
+namespace PSCHelpdesk.Plugins.HetznerServer.Models;
+
+public class ServerSetting
+{
+ public string Id { get; set; }
+ public string ApiKey { get; set; }
+
+ public ServerSetting()
+ {
+ Id = Guid.NewGuid().ToString();
+ ApiKey = string.Empty;
+ }
+}
\ No newline at end of file
diff --git a/HetznerServer/Models/Settings.cs b/HetznerServer/Models/Settings.cs
index 51381a3..de1cc60 100644
--- a/HetznerServer/Models/Settings.cs
+++ b/HetznerServer/Models/Settings.cs
@@ -2,5 +2,12 @@
public class Settings
{
-
+ public string HetznerApiKey { get; set; }
+ public List ServerSettings { get; set; }
+
+ public Settings()
+ {
+ HetznerApiKey = "";
+ ServerSettings = new List();
+ }
}
\ No newline at end of file
diff --git a/HetznerServer/ViewModels/HetznerSettingsViewModel.cs b/HetznerServer/ViewModels/HetznerSettingsViewModel.cs
index 310f270..2f5e7de 100644
--- a/HetznerServer/ViewModels/HetznerSettingsViewModel.cs
+++ b/HetznerServer/ViewModels/HetznerSettingsViewModel.cs
@@ -1,9 +1,12 @@
using System.Collections.ObjectModel;
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;
namespace PSCHelpdesk.Plugins.HetznerServer.ViewModels;
@@ -13,9 +16,12 @@ public partial class HetznerSettingsViewModel : ViewModelBase, IViewModelBase
private string _apiKey;
public HetznerSettingsViewModel()
{
- LocalSetting settings = new LocalSetting();
- settings.Load();
+ var settingsManager = (SettingsManager)Ioc.Default.GetService();
+ var settings = new Settings();
+ settingsManager.LoadPluginSettings("HetznerSettings", settings);
+
+ ApiKey = settings.HetznerApiKey;
}
public string ApiKey
diff --git a/HetznerServer/ViewModels/ServerViewModel.cs b/HetznerServer/ViewModels/ServerViewModel.cs
index abb9c34..56b71b0 100644
--- a/HetznerServer/ViewModels/ServerViewModel.cs
+++ b/HetznerServer/ViewModels/ServerViewModel.cs
@@ -1,19 +1,25 @@
using System.Collections.ObjectModel;
+using System.Diagnostics;
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;
namespace PSCHelpdesk.Plugins.HetznerServer.ViewModels;
public partial class ServerViewModel : ViewModelBase, IViewModelBase
{
+ private SettingsManager _settingsManager;
public ServerViewModel()
{
Server = new ObservableCollection();
SelectedServer = new Server(1,"","","","","");
+ _settingsManager = (SettingsManager)Ioc.Default.GetService();
loadServers();
}
@@ -41,7 +47,9 @@ public partial class ServerViewModel : ViewModelBase, IViewModelBase
private async void loadServers()
{
- HetznerCloudClient hetznerCloudClient = new HetznerCloudClient("kcsTOjNw7YxiOGVaIrk33gIYIHmLRov9Ap6BgWxQZVJyzSsmeNpClMhpJZUYCL0k");
+ 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)
@@ -67,8 +75,7 @@ public partial class ServerViewModel : ViewModelBase, IViewModelBase
[RelayCommand]
public void OpenSSH(Server server)
{
- /*LocalSetting setting = JsonSettings.Load();
- Process.Start(string.Format(setting.SSHClientExecutable, server.Ipv4));*/
+ Process.Start(_settingsManager.CoreSettings.SSHClientExecutable,string.Format(_settingsManager.CoreSettings.SSHClientExecutableArgs, server.Ipv4));
}
[RelayCommand]
diff --git a/HetznerServer/Views/HetznerSettingsView.axaml b/HetznerServer/Views/HetznerSettingsView.axaml
index 021800d..a65b79f 100644
--- a/HetznerServer/Views/HetznerSettingsView.axaml
+++ b/HetznerServer/Views/HetznerSettingsView.axaml
@@ -2,7 +2,18 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+ xmlns:vm="clr-namespace:PSCHelpdesk.Plugins.HetznerServer.ViewModels"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
- x:Class="PSCHelpdesk.Plugins.HetznerServer.Views.HetznerSettingsView">
- Welcome to settings hetzner!
+ x:Class="PSCHelpdesk.Plugins.HetznerServer.Views.HetznerSettingsView"
+ x:DataType="vm:HetznerSettingsViewModel">
+
+
+
+
+ Hetzner ApiKey
+
+
+
+
+
diff --git a/HetznerServer/Views/HetznerSettingsView.axaml.cs b/HetznerServer/Views/HetznerSettingsView.axaml.cs
index d468b39..99ffc22 100644
--- a/HetznerServer/Views/HetznerSettingsView.axaml.cs
+++ b/HetznerServer/Views/HetznerSettingsView.axaml.cs
@@ -1,13 +1,32 @@
using Avalonia;
using Avalonia.Controls;
+using Avalonia.Interactivity;
using Avalonia.Markup.Xaml;
+using CommunityToolkit.Mvvm.DependencyInjection;
+using PSCHelpdesk.Plugins.HetznerServer.Models;
+using PSCHelpdesk.Plugins.HetznerServer.ViewModels;
+using PSCHelpdesk.Shared.Service;
+using PSCHelpdesk.Shared.Setting;
namespace PSCHelpdesk.Plugins.HetznerServer.Views;
public partial class HetznerSettingsView : UserControl
{
+ private SettingsManager settingsManager;
+ private Settings settings;
public HetznerSettingsView()
{
InitializeComponent();
+
+ settingsManager = (SettingsManager)Ioc.Default.GetService();
+ settings = new Settings();
+ settingsManager.LoadPluginSettings("HetznerSettings", settings);
+
+ }
+
+ private void SaveSettings_OnClick(object? sender, RoutedEventArgs e)
+ {
+ settings.HetznerApiKey = ((HetznerSettingsViewModel)this.DataContext).ApiKey;
+ settingsManager.SavePluginSettings("HetznerSettings", settings);
}
}
\ No newline at end of file
diff --git a/PSCHelpdesk.sln.DotSettings.user b/PSCHelpdesk.sln.DotSettings.user
index b831f9c..06a4058 100644
--- a/PSCHelpdesk.sln.DotSettings.user
+++ b/PSCHelpdesk.sln.DotSettings.user
@@ -15,6 +15,7 @@
ForceIncluded
ForceIncluded
ForceIncluded
+ ForceIncluded
ForceIncluded
ForceIncluded
ForceIncluded
@@ -37,6 +38,7 @@
ForceIncluded
ForceIncluded
ForceIncluded
+ ForceIncluded
ForceIncluded
ForceIncluded
ForceIncluded
diff --git a/PSCHelpdesk/PSCHelpdesk/Models/LocalSetting.cs b/PSCHelpdesk/PSCHelpdesk/Models/LocalSetting.cs
deleted file mode 100644
index ec863ee..0000000
--- a/PSCHelpdesk/PSCHelpdesk/Models/LocalSetting.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-using System;
-using Nucs.JsonSettings;
-
-namespace PSCHelpdesk.Models;
-
-public class LocalSetting: JsonSettings
-{
- public string GlobalConfigFilePath { get; set; }
-
- public string SSHClientExecutable { get; set; }
-
- public string SCPClientExecutable { get; set; }
-
- public string SSHClientExecutableArgs { get; set; }
-
- public string SCPClientExecutableArgs { get; set; }
-
- public string PrivateSSHKeyPath { get; set; }
- public override string FileName { get; set; } = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) +
- @"\PSCHelpDesk\config.json";
-}
\ No newline at end of file
diff --git a/PSCHelpdesk/PSCHelpdesk/PSCHelpdesk.csproj b/PSCHelpdesk/PSCHelpdesk/PSCHelpdesk.csproj
index 1c78946..5e27e9e 100644
--- a/PSCHelpdesk/PSCHelpdesk/PSCHelpdesk.csproj
+++ b/PSCHelpdesk/PSCHelpdesk/PSCHelpdesk.csproj
@@ -21,7 +21,6 @@
-
@@ -48,4 +47,8 @@
Code
+
+
+
+
diff --git a/PSCHelpdesk/PSCHelpdesk/Services/PluginService.cs b/PSCHelpdesk/PSCHelpdesk/Services/PluginService.cs
index 0faa163..e380428 100644
--- a/PSCHelpdesk/PSCHelpdesk/Services/PluginService.cs
+++ b/PSCHelpdesk/PSCHelpdesk/Services/PluginService.cs
@@ -63,6 +63,7 @@ public class PluginService
var pluginLoader = Ioc.Default.GetService(typeof(IPluginLoader)) as IPluginLoader;
var menuService = Ioc.Default.GetRequiredService();
var settingsService = Ioc.Default.GetRequiredService();
+ var settingsManager = Ioc.Default.GetRequiredService();
var testService = Ioc.Default.GetRequiredService();
var appService = Ioc.Default.GetService(typeof(AppService)) as AppService;
@@ -78,6 +79,7 @@ public class PluginService
.AddRemoteTypes(new []{typeof(Item)})
.AddHostService(menuService)
.AddHostService(settingsService)
+ .AddHostService(settingsManager)
.AddHostService(testService)
//.AddHostService(settingsService)
diff --git a/PSCHelpdesk/PSCHelpdesk/Startup.cs b/PSCHelpdesk/PSCHelpdesk/Startup.cs
index 99546a7..08dbec2 100644
--- a/PSCHelpdesk/PSCHelpdesk/Startup.cs
+++ b/PSCHelpdesk/PSCHelpdesk/Startup.cs
@@ -5,6 +5,7 @@ using Prise.Proxy;
using PSCHelpdesk.Converter;
using PSCHelpdesk.Services;
using PSCHelpdesk.Shared.Service;
+using PSCHelpdesk.Shared.Setting;
using PSCHelpdesk.ViewModels;
namespace PSCHelpdesk;
@@ -14,12 +15,14 @@ class Startup
public static void RegisterServices()
{
var menuService = new MenuService();
+ var settingsManager = new SettingsManager();
var settingsService = new SettingsService();
var te = new ServiceCollection()
.AddPrise()
.AddFactory(()=> new AvaloniaPluginResultConverter())
.AddSingleton()
+ .AddSingleton(settingsManager)
.AddSingleton(menuService)
.AddSingleton(settingsService)
.AddSingleton(new TestService())
diff --git a/PSCHelpdesk/PSCHelpdesk/ViewModels/MainWindowViewModel.cs b/PSCHelpdesk/PSCHelpdesk/ViewModels/MainWindowViewModel.cs
index 4853255..5b4ee70 100644
--- a/PSCHelpdesk/PSCHelpdesk/ViewModels/MainWindowViewModel.cs
+++ b/PSCHelpdesk/PSCHelpdesk/ViewModels/MainWindowViewModel.cs
@@ -2,11 +2,7 @@ using System;
using System.Collections.Generic;
using System.Linq;
using System.Reactive;
-using System.Windows.Input;
-using Avalonia.Controls;
using CommunityToolkit.Mvvm.DependencyInjection;
-using CommunityToolkit.Mvvm.Input;
-using Nucs.JsonSettings;
using PSCHelpdesk.Services;
using PSCHelpdesk.Shared.Menu;
using PSCHelpdesk.Shared.Service;
diff --git a/PSCHelpdesk/PSCHelpdesk/ViewModels/SettingsGlobalViewModel.cs b/PSCHelpdesk/PSCHelpdesk/ViewModels/SettingsGlobalViewModel.cs
index ba56b06..faccada 100644
--- a/PSCHelpdesk/PSCHelpdesk/ViewModels/SettingsGlobalViewModel.cs
+++ b/PSCHelpdesk/PSCHelpdesk/ViewModels/SettingsGlobalViewModel.cs
@@ -1,13 +1,6 @@
-using System;
-using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.Diagnostics;
-using System.IO;
-using System.Threading.Tasks;
-using CommunityToolkit.Mvvm.ComponentModel;
-using CommunityToolkit.Mvvm.Input;
-using Nucs.JsonSettings;
-using PSCHelpdesk.Models;
+using CommunityToolkit.Mvvm.DependencyInjection;
+using PSCHelpdesk.Shared.Service;
+using PSCHelpdesk.Shared.Setting;
using PSCHelpdesk.Shared.ViewModels;
namespace PSCHelpdesk.ViewModels;
@@ -58,12 +51,13 @@ public partial class SettingsGlobalViewModel : ViewModelBase, IViewModelBase
public SettingsGlobalViewModel()
{
- LocalSetting settings = new LocalSetting();
- settings.Load();
- this.GlobalConfigFilePath = settings.GlobalConfigFilePath;
- this.PrivateSSHKeyPath = settings.PrivateSSHKeyPath;
- this.ScpClientPath = settings.SCPClientExecutable;
- this.SshClientPath = settings.SSHClientExecutable;
+ var settingsManager = new SettingsManager();
+ this.GlobalConfigFilePath = settingsManager.CoreSettings.GlobalConfigFilePath;
+ this.PrivateSSHKeyPath = settingsManager.CoreSettings.PrivateSSHKeyPath;
+ this.ScpClientPath = settingsManager.CoreSettings.SCPClientExecutable;
+ this.SshClientPath = settingsManager.CoreSettings.SSHClientExecutable;
+ this.SshClientPathArgs = settingsManager.CoreSettings.SSHClientExecutableArgs;
+ this.ScpClientPathArgs = settingsManager.CoreSettings.SCPClientExecutableArgs;
}
}
\ No newline at end of file
diff --git a/PSCHelpdesk/PSCHelpdesk/ViewModels/SettingsViewModel.cs b/PSCHelpdesk/PSCHelpdesk/ViewModels/SettingsViewModel.cs
index 18d5fad..fc67079 100644
--- a/PSCHelpdesk/PSCHelpdesk/ViewModels/SettingsViewModel.cs
+++ b/PSCHelpdesk/PSCHelpdesk/ViewModels/SettingsViewModel.cs
@@ -1,16 +1,5 @@
-using System;
-using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.Diagnostics;
-using System.IO;
-using System.Linq;
-using System.Threading.Tasks;
-using CommunityToolkit.Mvvm.ComponentModel;
+using System.Collections.Generic;
using CommunityToolkit.Mvvm.DependencyInjection;
-using CommunityToolkit.Mvvm.Input;
-using DynamicData;
-using Nucs.JsonSettings;
-using PSCHelpdesk.Models;
using PSCHelpdesk.Services;
using PSCHelpdesk.Shared.Service;
using PSCHelpdesk.Shared.ViewModels;
@@ -30,10 +19,9 @@ public partial class SettingsViewModel : ViewModelBase
public SettingsViewModel()
{
- var settingsService = (SettingsService)Ioc.Default.GetService();
-
this.TabItems = new List();
-
+
+ var settingsService = (SettingsService)Ioc.Default.GetService();
foreach (var setting in settingsService.Settings)
{
TabItems.Add(new SettingsTabItemViewModel(setting.Header, setting.CommandParameter));
diff --git a/PSCHelpdesk/PSCHelpdesk/Views/ContentDisplay.axaml b/PSCHelpdesk/PSCHelpdesk/Views/ContentDisplay.axaml
index ce79d41..f180f38 100644
--- a/PSCHelpdesk/PSCHelpdesk/Views/ContentDisplay.axaml
+++ b/PSCHelpdesk/PSCHelpdesk/Views/ContentDisplay.axaml
@@ -13,7 +13,6 @@
diff --git a/PSCHelpdesk/PSCHelpdesk/Views/ContentDisplay.axaml.cs b/PSCHelpdesk/PSCHelpdesk/Views/ContentDisplay.axaml.cs
index 02c6db3..2c0fdb3 100644
--- a/PSCHelpdesk/PSCHelpdesk/Views/ContentDisplay.axaml.cs
+++ b/PSCHelpdesk/PSCHelpdesk/Views/ContentDisplay.axaml.cs
@@ -1,8 +1,6 @@
using Avalonia;
using Avalonia.Controls.Primitives;
using Avalonia.Data;
-using CommunityToolkit.Mvvm.DependencyInjection;
-using Nucs.JsonSettings;
using PSCHelpdesk.Shared.Menu;
namespace PSCHelpdesk.Views;
diff --git a/PSCHelpdesk/PSCHelpdesk/Views/MainWindow.axaml b/PSCHelpdesk/PSCHelpdesk/Views/MainWindow.axaml
index 8a7ee27..4feb929 100644
--- a/PSCHelpdesk/PSCHelpdesk/Views/MainWindow.axaml
+++ b/PSCHelpdesk/PSCHelpdesk/Views/MainWindow.axaml
@@ -32,6 +32,7 @@
-
+
+
diff --git a/PSCHelpdesk/PSCHelpdesk/Views/SettingsGlobalView.axaml.cs b/PSCHelpdesk/PSCHelpdesk/Views/SettingsGlobalView.axaml.cs
index 9d12125..bd6f45b 100644
--- a/PSCHelpdesk/PSCHelpdesk/Views/SettingsGlobalView.axaml.cs
+++ b/PSCHelpdesk/PSCHelpdesk/Views/SettingsGlobalView.axaml.cs
@@ -1,10 +1,9 @@
-using System.IO;
-using Avalonia;
-using Avalonia.Controls;
+using Avalonia.Controls;
using Avalonia.Interactivity;
-using Avalonia.Markup.Xaml;
using Avalonia.Platform.Storage;
-using PSCHelpdesk.Models;
+using CommunityToolkit.Mvvm.DependencyInjection;
+using PSCHelpdesk.Shared.Service;
+using PSCHelpdesk.Shared.Setting;
using PSCHelpdesk.ViewModels;
namespace PSCHelpdesk.Views;
@@ -14,6 +13,7 @@ public partial class SettingsGlobalView : UserControl
public SettingsGlobalView()
{
InitializeComponent();
+
}
private async void ChooseGlobalSettingsFile_OnClick(object? sender, RoutedEventArgs e)
@@ -30,22 +30,21 @@ public partial class SettingsGlobalView : UserControl
if (file is not null && file.Count > 0)
{
SettingsGlobalViewModel model = (SettingsGlobalViewModel)this.DataContext;
- model.GlobalConfigFilePath = file[0].Path.ToString();
+ model.GlobalConfigFilePath = file[0].Path.AbsolutePath;
}
}
private void SaveSettings_OnClick(object? sender, RoutedEventArgs e)
{
- LocalSetting settings = new LocalSetting();
- Directory.CreateDirectory(Path.GetDirectoryName(settings.FileName));
+ SettingsManager settingsManager = (SettingsManager)Ioc.Default.GetService();
SettingsGlobalViewModel model = (SettingsGlobalViewModel)this.DataContext;
- settings.GlobalConfigFilePath = model.GlobalConfigFilePath;
- settings.SCPClientExecutable = model.ScpClientPath;
- settings.SSHClientExecutable = model.SshClientPath;
- settings.SCPClientExecutableArgs = model.ScpClientPathArgs;
- settings.SSHClientExecutableArgs = model.SshClientPathArgs;
- settings.PrivateSSHKeyPath = model.PrivateSSHKeyPath;
- settings.Save();
+ settingsManager.CoreSettings.GlobalConfigFilePath = model.GlobalConfigFilePath;
+ settingsManager.CoreSettings.SCPClientExecutable = model.ScpClientPath;
+ settingsManager.CoreSettings.SSHClientExecutable = model.SshClientPath;
+ settingsManager.CoreSettings.SCPClientExecutableArgs = model.ScpClientPathArgs;
+ settingsManager.CoreSettings.SSHClientExecutableArgs = model.SshClientPathArgs;
+ settingsManager.CoreSettings.PrivateSSHKeyPath = model.PrivateSSHKeyPath;
+ settingsManager.SaveSettings();
}
private async void ChooseSshClientFile_OnClick(object? sender, RoutedEventArgs e)
@@ -62,7 +61,7 @@ public partial class SettingsGlobalView : UserControl
if (file is not null && file.Count > 0)
{
SettingsGlobalViewModel model = (SettingsGlobalViewModel)this.DataContext;
- model.SshClientPath = file[0].Path.ToString();
+ model.SshClientPath = file[0].Path.AbsolutePath;
}
}
@@ -80,7 +79,7 @@ public partial class SettingsGlobalView : UserControl
if (file is not null && file.Count > 0)
{
SettingsGlobalViewModel model = (SettingsGlobalViewModel)this.DataContext;
- model.ScpClientPath = file[0].Path.ToString();
+ model.ScpClientPath = file[0].Path.AbsolutePath;
}
}
@@ -98,7 +97,7 @@ public partial class SettingsGlobalView : UserControl
if (file is not null && file.Count > 0)
{
SettingsGlobalViewModel model = (SettingsGlobalViewModel)this.DataContext;
- model.PrivateSSHKeyPath = file[0].Path.ToString();
+ model.PrivateSSHKeyPath = file[0].Path.AbsolutePath;
}
}
}
\ No newline at end of file
diff --git a/PSCHelpdesk/PSCHelpdesk/Views/SettingsView.axaml b/PSCHelpdesk/PSCHelpdesk/Views/SettingsView.axaml
index 96f17ad..2962a18 100644
--- a/PSCHelpdesk/PSCHelpdesk/Views/SettingsView.axaml
+++ b/PSCHelpdesk/PSCHelpdesk/Views/SettingsView.axaml
@@ -9,7 +9,7 @@
-
+
@@ -24,5 +24,5 @@
-
+
diff --git a/PSCHelpdesk/PSCHelpdesk/Views/SettingsView.axaml.cs b/PSCHelpdesk/PSCHelpdesk/Views/SettingsView.axaml.cs
index ec66cc1..1936f43 100644
--- a/PSCHelpdesk/PSCHelpdesk/Views/SettingsView.axaml.cs
+++ b/PSCHelpdesk/PSCHelpdesk/Views/SettingsView.axaml.cs
@@ -1,13 +1,4 @@
-using System;
-using System.IO;
-using Avalonia;
using Avalonia.Controls;
-using Avalonia.Interactivity;
-using Avalonia.Markup.Xaml;
-using Avalonia.Platform.Storage;
-using Nucs.JsonSettings;
-using PSCHelpdesk.Models;
-using PSCHelpdesk.ViewModels;
namespace PSCHelpdesk.Views;
diff --git a/Shared/Service/ISettingsManager.cs b/Shared/Service/ISettingsManager.cs
new file mode 100644
index 0000000..71639bc
--- /dev/null
+++ b/Shared/Service/ISettingsManager.cs
@@ -0,0 +1,6 @@
+namespace PSCHelpdesk.Shared.Service;
+
+public interface ISettingsManager
+{
+
+}
\ No newline at end of file
diff --git a/Shared/Setting/CoreSettings.cs b/Shared/Setting/CoreSettings.cs
new file mode 100644
index 0000000..f020e51
--- /dev/null
+++ b/Shared/Setting/CoreSettings.cs
@@ -0,0 +1,27 @@
+namespace PSCHelpdesk.Shared.Setting;
+
+public class CoreSettings
+{
+ public string GlobalConfigFilePath { get; set; }
+
+ public string SSHClientExecutable { get; set; }
+
+ public string SCPClientExecutable { get; set; }
+
+ public string SSHClientExecutableArgs { get; set; }
+
+ public string SCPClientExecutableArgs { get; set; }
+
+ public string PrivateSSHKeyPath { get; set; }
+
+ public CoreSettings()
+ {
+ GlobalConfigFilePath = string.Empty;
+ SSHClientExecutable = string.Empty;
+ SCPClientExecutable = string.Empty;
+ SSHClientExecutableArgs = string.Empty;
+ SCPClientExecutableArgs = string.Empty;
+ PrivateSSHKeyPath = string.Empty;
+ }
+
+}
\ No newline at end of file
diff --git a/Shared/Setting/SettingsManager.cs b/Shared/Setting/SettingsManager.cs
new file mode 100644
index 0000000..40ef80e
--- /dev/null
+++ b/Shared/Setting/SettingsManager.cs
@@ -0,0 +1,89 @@
+using Newtonsoft.Json;
+using PSCHelpdesk.Shared.Service;
+
+namespace PSCHelpdesk.Shared.Setting;
+
+public class SettingsManager: ISettingsManager
+{
+ private string DataRoot => Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "PSC", "PSCHelpDesk");
+
+ private string SettingsPath => Path.Combine(this.DataRoot, "settings.json");
+
+ public SettingsManager()
+ {
+ Directory.CreateDirectory(this.DataRoot);
+ this.LoadSettings();
+ }
+
+ ///
+ /// Gets or sets the core settings instance.
+ ///
+ public CoreSettings CoreSettings { get; set; } = new CoreSettings();
+
+ ///
+ /// Gets or sets the UI Settings instance.
+ ///
+ // public UISettings UISettings { get; set; } = new UISettings();
+
+ private string SettingsFile { get; set; }
+
+ ///
+ /// Reads the configuration file.
+ ///
+ public void LoadSettings()
+ {
+ if (File.Exists(this.SettingsPath))
+ {
+ string json = File.ReadAllText(this.SettingsPath);
+ JsonConvert.PopulateObject(json, this.CoreSettings);
+ }
+ else
+ {
+ this.CoreSettings = new CoreSettings();
+ }
+ }
+
+ ///
+ /// Saves the configuration file.
+ ///
+ public void SaveSettings()
+ {
+ // serialize JSON directly to a file
+ using (StreamWriter file = File.CreateText(this.SettingsPath))
+ {
+ JsonSerializer serializer = new JsonSerializer()
+ {
+ Formatting = Formatting.Indented,
+ };
+
+ serializer.Serialize(file, this.CoreSettings);
+ }
+ }
+
+ public void LoadPluginSettings(string pluginName, object? settingsObject)
+ {
+
+ var pluginSettingsPath = Path.Combine(this.CoreSettings.GlobalConfigFilePath, pluginName + "_settings.json");
+
+ if (File.Exists(pluginSettingsPath))
+ {
+ string json = File.ReadAllText(pluginSettingsPath);
+ JsonConvert.PopulateObject(json, settingsObject);
+ }
+ }
+
+ public void SavePluginSettings(string pluginName, object? settingsObject)
+ {
+ var pluginSettingsPath = Path.Combine(this.CoreSettings.GlobalConfigFilePath, pluginName + "_settings.json");
+
+ using (StreamWriter file = File.CreateText(pluginSettingsPath))
+ {
+ JsonSerializer serializer = new JsonSerializer()
+ {
+ Formatting = Formatting.Indented,
+ };
+
+ serializer.Serialize(file, settingsObject);
+ }
+ }
+}
diff --git a/Shared/Shared.csproj b/Shared/Shared.csproj
index e1c2c51..635fbaa 100644
--- a/Shared/Shared.csproj
+++ b/Shared/Shared.csproj
@@ -17,6 +17,9 @@
..\..\..\.nuget\packages\avalonia\11.1.0\ref\net8.0\Avalonia.Markup.Xaml.dll
+
+ ..\..\..\.nuget\packages\newtonsoft.json\13.0.3\lib\net6.0\Newtonsoft.Json.dll
+