This commit is contained in:
DESKTOP-E17406D\boonkerz 2024-11-18 08:47:45 +01:00
parent 151307c416
commit e29a9a92b2
26 changed files with 322 additions and 54 deletions

View File

@ -1 +0,0 @@
PSCHelpdesk

View File

@ -11,18 +11,21 @@
</component> </component>
<component name="ChangeListManager"> <component name="ChangeListManager">
<list default="true" id="95257dc5-08bd-4c50-8726-85956b3c2c92" name="Changes" comment=""> <list default="true" id="95257dc5-08bd-4c50-8726-85956b3c2c92" name="Changes" comment="">
<change beforePath="$PROJECT_DIR$/.idea/.idea.PSCHelpdesk/.idea/riderPublish.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/.idea.PSCHelpdesk/.idea/riderPublish.xml" afterDir="false" /> <change afterPath="$PROJECT_DIR$/FastBill/Views/CustomerView.axaml.cs" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/.idea.PSCHelpdesk/.idea/.name" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/.idea.PSCHelpdesk/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/.idea.PSCHelpdesk/.idea/workspace.xml" afterDir="false" /> <change beforePath="$PROJECT_DIR$/.idea/.idea.PSCHelpdesk/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/.idea.PSCHelpdesk/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/FastBill/FastBill.cs" beforeDir="false" afterPath="$PROJECT_DIR$/FastBill/FastBill.cs" afterDir="false" /> <change beforePath="$PROJECT_DIR$/FastBill/FastBill.cs" beforeDir="false" afterPath="$PROJECT_DIR$/FastBill/FastBill.cs" afterDir="false" />
<change beforePath="$PROJECT_DIR$/FastBill/FastBill.csproj" beforeDir="false" afterPath="$PROJECT_DIR$/FastBill/FastBill.csproj" afterDir="false" /> <change beforePath="$PROJECT_DIR$/FastBill/FastBill.csproj" beforeDir="false" afterPath="$PROJECT_DIR$/FastBill/FastBill.csproj" afterDir="false" />
<change beforePath="$PROJECT_DIR$/HetznerServer/HetznerServer.csproj" beforeDir="false" afterPath="$PROJECT_DIR$/HetznerServer/HetznerServer.csproj" afterDir="false" />
<change beforePath="$PROJECT_DIR$/HetznerServer/Models/Server.cs" beforeDir="false" afterPath="$PROJECT_DIR$/HetznerServer/Models/Server.cs" afterDir="false" /> <change beforePath="$PROJECT_DIR$/HetznerServer/Models/Server.cs" beforeDir="false" afterPath="$PROJECT_DIR$/HetznerServer/Models/Server.cs" afterDir="false" />
<change beforePath="$PROJECT_DIR$/HetznerServer/Models/ServerSetting.cs" beforeDir="false" afterPath="$PROJECT_DIR$/HetznerServer/Models/ServerSetting.cs" afterDir="false" />
<change beforePath="$PROJECT_DIR$/HetznerServer/Service/ServerService.cs" beforeDir="false" afterPath="$PROJECT_DIR$/HetznerServer/Service/ServerService.cs" afterDir="false" /> <change beforePath="$PROJECT_DIR$/HetznerServer/Service/ServerService.cs" beforeDir="false" afterPath="$PROJECT_DIR$/HetznerServer/Service/ServerService.cs" afterDir="false" />
<change beforePath="$PROJECT_DIR$/HetznerServer/ViewModels/ServerViewModel.cs" beforeDir="false" afterPath="$PROJECT_DIR$/HetznerServer/ViewModels/ServerViewModel.cs" afterDir="false" />
<change beforePath="$PROJECT_DIR$/HetznerServer/Views/ServerDetailView.axaml" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/HetznerServer/Views/ServerDetailView.axaml.cs" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/HetznerServer/Views/ServerView.axaml" beforeDir="false" afterPath="$PROJECT_DIR$/HetznerServer/Views/ServerView.axaml" afterDir="false" /> <change beforePath="$PROJECT_DIR$/HetznerServer/Views/ServerView.axaml" beforeDir="false" afterPath="$PROJECT_DIR$/HetznerServer/Views/ServerView.axaml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/PSCHelpdesk.sln.DotSettings.user" beforeDir="false" afterPath="$PROJECT_DIR$/PSCHelpdesk.sln.DotSettings.user" afterDir="false" /> <change beforePath="$PROJECT_DIR$/PSCHelpdesk.sln.DotSettings.user" beforeDir="false" afterPath="$PROJECT_DIR$/PSCHelpdesk.sln.DotSettings.user" afterDir="false" />
<change beforePath="$PROJECT_DIR$/PSCHelpdesk/PSCHelpdesk/Services/PluginManager.cs" beforeDir="false" afterPath="$PROJECT_DIR$/PSCHelpdesk/PSCHelpdesk/Services/PluginManager.cs" afterDir="false" /> <change beforePath="$PROJECT_DIR$/_dist/hetzner/HetznerServer.deps.json" beforeDir="false" afterPath="$PROJECT_DIR$/_dist/hetzner/HetznerServer.deps.json" afterDir="false" />
<change beforePath="$PROJECT_DIR$/PSCHelpdesk/PSCHelpdesk/ViewModels/MainWindowViewModel.cs" beforeDir="false" afterPath="$PROJECT_DIR$/PSCHelpdesk/PSCHelpdesk/ViewModels/MainWindowViewModel.cs" afterDir="false" />
<change beforePath="$PROJECT_DIR$/PSCHelpdesk/PSCHelpdesk/ViewModels/PluginListViewModel.cs" beforeDir="false" afterPath="$PROJECT_DIR$/PSCHelpdesk/PSCHelpdesk/ViewModels/PluginListViewModel.cs" afterDir="false" />
<change beforePath="$PROJECT_DIR$/PSCHelpdesk/PSCHelpdesk/Views/MainWindow.axaml" beforeDir="false" afterPath="$PROJECT_DIR$/PSCHelpdesk/PSCHelpdesk/Views/MainWindow.axaml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/_dist/hetzner/HetznerServer.dll" beforeDir="false" afterPath="$PROJECT_DIR$/_dist/hetzner/HetznerServer.dll" afterDir="false" /> <change beforePath="$PROJECT_DIR$/_dist/hetzner/HetznerServer.dll" beforeDir="false" afterPath="$PROJECT_DIR$/_dist/hetzner/HetznerServer.dll" afterDir="false" />
<change beforePath="$PROJECT_DIR$/_dist/hetzner/HetznerServer.pdb" beforeDir="false" afterPath="$PROJECT_DIR$/_dist/hetzner/HetznerServer.pdb" afterDir="false" /> <change beforePath="$PROJECT_DIR$/_dist/hetzner/HetznerServer.pdb" beforeDir="false" afterPath="$PROJECT_DIR$/_dist/hetzner/HetznerServer.pdb" afterDir="false" />
<change beforePath="$PROJECT_DIR$/_dist/nextcloud/Nextcloud.dll" beforeDir="false" afterPath="$PROJECT_DIR$/_dist/nextcloud/Nextcloud.dll" afterDir="false" /> <change beforePath="$PROJECT_DIR$/_dist/nextcloud/Nextcloud.dll" beforeDir="false" afterPath="$PROJECT_DIR$/_dist/nextcloud/Nextcloud.dll" afterDir="false" />
@ -34,19 +37,18 @@
<option name="LAST_RESOLUTION" value="IGNORE" /> <option name="LAST_RESOLUTION" value="IGNORE" />
</component> </component>
<component name="DpaMonitoringSettings"> <component name="DpaMonitoringSettings">
<option name="autoShow" value="false" /> <option name="firstShow" value="false" />
</component> </component>
<component name="Git.Settings"> <component name="Git.Settings">
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" /> <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
</component> </component>
<component name="HighlightingSettingsPerFile"> <component name="HighlightingSettingsPerFile">
<setting file="file://$APPLICATION_CONFIG_DIR$/resharper-host/DecompilerCache/decompiler/41a0cf7c8a374f46b063a4351ae9caba572200/c2/b03cb7ea/MaterialIconKind.cs" root0="SKIP_HIGHLIGHTING" /> <setting file="file://$APPLICATION_CONFIG_DIR$/resharper-host/SourcesCache/fa3c59274a754721f822d1776be91c7ffdd37ff4219098396aa16ba1fc5447/Ioc.cs" root0="FORCE_HIGHLIGHTING" />
<setting file="file://$APPLICATION_CONFIG_DIR$/resharper-host/DecompilerCache/decompiler/667004c0a83e47158c9865f6d54f01d91ac00/59/bf99e13a/IPluginLoader.cs" root0="SKIP_HIGHLIGHTING" />
<setting file="file://$APPLICATION_CONFIG_DIR$/resharper-host/SourcesCache/27be5d106a789638721745a2a46f9cb0f7a39905117d644638b6e0d56261be/ReplaySubject.cs" root0="FORCE_HIGHLIGHTING" />
<setting file="file://$APPLICATION_CONFIG_DIR$/resharper-host/SourcesCache/2e6883f773fb7c69a15db509adac9a0c068e4ca54fa119e835fd2324311c3b/Ioc.cs" root0="FORCE_HIGHLIGHTING" />
<setting file="file://$APPLICATION_CONFIG_DIR$/resharper-host/SourcesCache/9d4f4ac7db6d2c5d183ab2d92602280ed4349fd6e6a1b6313546b3d01fdab5/ServiceProvider.cs" root0="FORCE_HIGHLIGHTING" />
<setting file="file://$APPLICATION_CONFIG_DIR$/resharper-host/SourcesCache/b4d338c08631a580604cf98f3ead4bcf84405bb3807bfc9f3bc14ac2d2be/Activator.RuntimeType.cs" root0="FORCE_HIGHLIGHTING" />
<setting file="file://$PROJECT_DIR$/HetznerServer/ViewModels/ServerViewModel.cs" root0="FORCE_HIGHLIGHTING" /> <setting file="file://$PROJECT_DIR$/HetznerServer/ViewModels/ServerViewModel.cs" root0="FORCE_HIGHLIGHTING" />
<setting file="mock://C:/Users/boonkerz/RiderProjects/PSCHelpDesk/HetznerServer/Views/ServerDetailView.axaml" root0="SKIP_HIGHLIGHTING" />
<setting file="mock://C:/Users/boonkerz/RiderProjects/PSCHelpDesk/HetznerServer/Views/ServerDetailView.axaml" root0="SKIP_HIGHLIGHTING" />
<setting file="mock://C:/Users/boonkerz/RiderProjects/PSCHelpDesk/HetznerServer/Views/ServerDetailView.axaml" root0="SKIP_HIGHLIGHTING" />
<setting file="mock://C:/Users/boonkerz/RiderProjects/PSCHelpDesk/HetznerServer/Views/ServerDetailView.axaml" root0="SKIP_HIGHLIGHTING" />
<setting file="file://$PROJECT_DIR$/HetznerServer/Views/ServerView.axaml" root0="FORCE_HIGHLIGHTING" /> <setting file="file://$PROJECT_DIR$/HetznerServer/Views/ServerView.axaml" root0="FORCE_HIGHLIGHTING" />
<setting file="file://$PROJECT_DIR$/HetznerServer/Views/ServerView.axaml.cs" root0="FORCE_HIGHLIGHTING" /> <setting file="file://$PROJECT_DIR$/HetznerServer/Views/ServerView.axaml.cs" root0="FORCE_HIGHLIGHTING" />
<setting file="file://$PROJECT_DIR$/Nextcloud/Views/NotesView.axaml" root0="FORCE_HIGHLIGHTING" /> <setting file="file://$PROJECT_DIR$/Nextcloud/Views/NotesView.axaml" root0="FORCE_HIGHLIGHTING" />
@ -56,6 +58,8 @@
<setting file="file://$PROJECT_DIR$/Vendor/Prise/AssemblyScanning/DefaultAssemblyResolver.cs" root0="FORCE_HIGHLIGHTING" /> <setting file="file://$PROJECT_DIR$/Vendor/Prise/AssemblyScanning/DefaultAssemblyResolver.cs" root0="FORCE_HIGHLIGHTING" />
<setting file="file://$PROJECT_DIR$/Vendor/Prise/DefaultPluginLoader.cs" root0="FORCE_HIGHLIGHTING" /> <setting file="file://$PROJECT_DIR$/Vendor/Prise/DefaultPluginLoader.cs" root0="FORCE_HIGHLIGHTING" />
<setting file="file://$PROJECT_DIR$/Vendor/Prise/DependencyInjection/ServiceCollectionExtensions.cs" root0="FORCE_HIGHLIGHTING" /> <setting file="file://$PROJECT_DIR$/Vendor/Prise/DependencyInjection/ServiceCollectionExtensions.cs" root0="FORCE_HIGHLIGHTING" />
<setting file="mock://ServerDetailView.axaml" root0="SKIP_HIGHLIGHTING" />
<setting file="mock://ServerDetailView.axaml" root0="SKIP_HIGHLIGHTING" />
</component> </component>
<component name="InvalidFacetManager"> <component name="InvalidFacetManager">
<ignored-facets> <ignored-facets>
@ -81,7 +85,7 @@
<component name="PropertiesComponent"><![CDATA[{ <component name="PropertiesComponent"><![CDATA[{
"keyToString": { "keyToString": {
".NET Project.PSCHelpdesk.Desktop ohne plugin.executor": "Run", ".NET Project.PSCHelpdesk.Desktop ohne plugin.executor": "Run",
".NET Project.PSCHelpdesk.Desktop.executor": "Run", ".NET Project.PSCHelpdesk.Desktop.executor": "Debug",
"Publish to folder.Build HetznerServer Plugin Debug.executor": "Run", "Publish to folder.Build HetznerServer Plugin Debug.executor": "Run",
"Publish to folder.Copy Fastbill.executor": "Run", "Publish to folder.Copy Fastbill.executor": "Run",
"Publish to folder.Copy Hetzner Target.executor": "Run", "Publish to folder.Copy Hetzner Target.executor": "Run",
@ -93,6 +97,7 @@
"Publish to folder.Publish NextCloud to folder.executor": "Run", "Publish to folder.Publish NextCloud 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", "RunOnceActivity.ShowReadmeOnStart": "true",
"RunOnceActivity.git.unshallow": "true",
"XThreadsFramesViewSplitterKey": "0.4427131", "XThreadsFramesViewSplitterKey": "0.4427131",
"git-widget-placeholder": "master", "git-widget-placeholder": "master",
"ignore.virus.scanning.warn.message": "true", "ignore.virus.scanning.warn.message": "true",
@ -102,7 +107,7 @@
"node.js.selected.package.eslint": "(autodetect)", "node.js.selected.package.eslint": "(autodetect)",
"node.js.selected.package.tslint": "(autodetect)", "node.js.selected.package.tslint": "(autodetect)",
"nodejs_package_manager_path": "npm", "nodejs_package_manager_path": "npm",
"settings.editor.selected.configurable": "SolutionBuilderGeneralOptionsPage", "settings.editor.selected.configurable": "preferences.lookFeel",
"vue.rearranger.settings.migration": "true" "vue.rearranger.settings.migration": "true"
}, },
"keyToStringList": { "keyToStringList": {
@ -183,10 +188,10 @@
<option name="Build" default="false" projectName="HetznerServer" projectPath="$PROJECT_DIR$/HetznerServer/HetznerServer.csproj" /> <option name="Build" default="false" projectName="HetznerServer" projectPath="$PROJECT_DIR$/HetznerServer/HetznerServer.csproj" />
<option name="Build" default="false" projectName="FastBill" projectPath="$PROJECT_DIR$/FastBill/FastBill.csproj" /> <option name="Build" default="false" projectName="FastBill" projectPath="$PROJECT_DIR$/FastBill/FastBill.csproj" />
<option name="Build" default="false" projectName="PrintshopCreator" projectPath="$PROJECT_DIR$/PrintshopCreator/PrintshopCreator.csproj" /> <option name="Build" default="false" projectName="PrintshopCreator" projectPath="$PROJECT_DIR$/PrintshopCreator/PrintshopCreator.csproj" />
<option name="RunConfigurationTask" enabled="true" run_configuration_name="Copy NextCloud Target" run_configuration_type="DotNetFolderPublish" />
<option name="RunConfigurationTask" enabled="true" run_configuration_name="Copy Hetzner Target" run_configuration_type="DotNetFolderPublish" />
<option name="RunConfigurationTask" enabled="true" run_configuration_name="Copy Fastbill" run_configuration_type="DotNetFolderPublish" /> <option name="RunConfigurationTask" enabled="true" run_configuration_name="Copy Fastbill" run_configuration_type="DotNetFolderPublish" />
<option name="RunConfigurationTask" enabled="true" run_configuration_name="Copy PrinshopCreator" run_configuration_type="DotNetFolderPublish" /> <option name="RunConfigurationTask" enabled="true" run_configuration_name="Copy PrinshopCreator" run_configuration_type="DotNetFolderPublish" />
<option name="RunConfigurationTask" enabled="true" run_configuration_name="Copy Hetzner" run_configuration_type="DotNetFolderPublish" />
<option name="RunConfigurationTask" enabled="true" run_configuration_name="Copy NextCloud" run_configuration_type="DotNetFolderPublish" />
<option name="Build" /> <option name="Build" />
</method> </method>
</configuration> </configuration>
@ -210,7 +215,6 @@
<item itemvalue=".NET Project.PSCHelpdesk.Browser" /> <item itemvalue=".NET Project.PSCHelpdesk.Browser" />
<item itemvalue=".NET Project.PSCHelpdesk.Desktop" /> <item itemvalue=".NET Project.PSCHelpdesk.Desktop" />
<item itemvalue=".NET Project.PSCHelpdesk.Desktop ohne plugin" /> <item itemvalue=".NET Project.PSCHelpdesk.Desktop ohne plugin" />
<item itemvalue="Android.PSCHelpdesk.Android" />
<item itemvalue="iOS.PSCHelpdesk.iOS" /> <item itemvalue="iOS.PSCHelpdesk.iOS" />
<item itemvalue="Publish to folder.Copy NextCloud" /> <item itemvalue="Publish to folder.Copy NextCloud" />
<item itemvalue="Publish to folder.Copy Fastbill" /> <item itemvalue="Publish to folder.Copy Fastbill" />
@ -243,6 +247,9 @@
<workItem from="1731437334002" duration="2883000" /> <workItem from="1731437334002" duration="2883000" />
<workItem from="1731491898307" duration="3676000" /> <workItem from="1731491898307" duration="3676000" />
<workItem from="1731659978668" duration="9478000" /> <workItem from="1731659978668" duration="9478000" />
<workItem from="1731775118011" duration="3650000" />
<workItem from="1731831383500" duration="6829000" />
<workItem from="1731872471713" duration="6104000" />
</task> </task>
<servers /> <servers />
</component> </component>
@ -274,19 +281,6 @@
<properties documentPath="C:\Users\info\RiderProjects\pschelpdesk\HetznerServer\Menu\MainMenu.cs" containingFunctionPresentation="Method 'addMenu'" /> <properties documentPath="C:\Users\info\RiderProjects\pschelpdesk\HetznerServer\Menu\MainMenu.cs" containingFunctionPresentation="Method 'addMenu'" />
<option name="timeStamp" value="92" /> <option name="timeStamp" value="92" />
</line-breakpoint> </line-breakpoint>
<line-breakpoint enabled="true" type="DotNet Breakpoints">
<url>file://$PROJECT_DIR$/Shared/Setting/SettingsManager.cs</url>
<line>85</line>
<properties documentPath="$PROJECT_DIR$/Shared/Setting/SettingsManager.cs" containingFunctionPresentation="Method 'SavePluginSettings'">
<startOffsets>
<option value="2568" />
</startOffsets>
<endOffsets>
<option value="2611" />
</endOffsets>
</properties>
<option name="timeStamp" value="154" />
</line-breakpoint>
<line-breakpoint enabled="true" type="DotNet Breakpoints"> <line-breakpoint enabled="true" type="DotNet Breakpoints">
<url>file://$PROJECT_DIR$/PSCHelpdesk/PSCHelpdesk/Views/SettingsGlobalView.axaml.cs</url> <url>file://$PROJECT_DIR$/PSCHelpdesk/PSCHelpdesk/Views/SettingsGlobalView.axaml.cs</url>
<line>29</line> <line>29</line>
@ -392,17 +386,56 @@
<option name="timeStamp" value="196" /> <option name="timeStamp" value="196" />
</line-breakpoint> </line-breakpoint>
<line-breakpoint enabled="true" type="DotNet Breakpoints"> <line-breakpoint enabled="true" type="DotNet Breakpoints">
<url>file://$PROJECT_DIR$/FastBill/FastBill.cs</url> <url>file://$PROJECT_DIR$/HetznerServer/ViewModels/ServerViewModel.cs</url>
<line>18</line> <line>99</line>
<properties documentPath="C:\Users\info\RiderProjects\pschelpdesk\FastBill\FastBill.cs" containingFunctionPresentation="Method 'Configure'"> <properties documentPath="C:\Users\boonkerz\RiderProjects\PSCHelpDesk\HetznerServer\ViewModels\ServerViewModel.cs" containingFunctionPresentation="Method 'saveServerSettings'">
<startOffsets> <startOffsets>
<option value="365" /> <option value="3608" />
</startOffsets> </startOffsets>
<endOffsets> <endOffsets>
<option value="438" /> <option value="3651" />
</endOffsets> </endOffsets>
</properties> </properties>
<option name="timeStamp" value="200" /> <option name="timeStamp" value="204" />
</line-breakpoint>
<line-breakpoint enabled="true" type="DotNet Breakpoints">
<url>file://$PROJECT_DIR$/FastBill/Api/Customers.cs</url>
<line>20</line>
<properties documentPath="C:\Users\boonkerz\RiderProjects\PSCHelpDesk\FastBill\Api\Customers.cs" containingFunctionPresentation="Method 'SearchCustomer'">
<startOffsets>
<option value="781" />
</startOffsets>
<endOffsets>
<option value="802" />
</endOffsets>
</properties>
<option name="timeStamp" value="208" />
</line-breakpoint>
<line-breakpoint enabled="true" type="DotNet Breakpoints">
<url>file://$PROJECT_DIR$/FastBill/ViewModels/CustomerViewModel.cs</url>
<line>28</line>
<properties documentPath="C:\Users\boonkerz\RiderProjects\PSCHelpDesk\FastBill\ViewModels\CustomerViewModel.cs" containingFunctionPresentation="Method 'SearchTerm'">
<startOffsets>
<option value="689" />
</startOffsets>
<endOffsets>
<option value="744" />
</endOffsets>
</properties>
<option name="timeStamp" value="209" />
</line-breakpoint>
<line-breakpoint enabled="true" type="DotNet Breakpoints">
<url>file://$PROJECT_DIR$/FastBill/Api/Customers.cs</url>
<line>18</line>
<properties documentPath="C:\Users\boonkerz\RiderProjects\PSCHelpDesk\FastBill\Api\Customers.cs" containingFunctionPresentation="Method 'SearchCustomer'">
<startOffsets>
<option value="702" />
</startOffsets>
<endOffsets>
<option value="758" />
</endOffsets>
</properties>
<option name="timeStamp" value="210" />
</line-breakpoint> </line-breakpoint>
</breakpoints> </breakpoints>
</breakpoint-manager> </breakpoint-manager>

26
FastBill/Api/Customers.cs Normal file
View File

@ -0,0 +1,26 @@
using FastBill.Models;
using RestSharp;
using RestSharp.Authenticators;
namespace FastBill.Api;
public class Customers
{
async public Task<List<Customer>> SearchCustomer(Settings settings, string term)
{
var customers = new List<Customer>();
var client = new RestClient("https://my.fastbill.com/");
var request = new RestRequest("api/1.0/api.php");
request.Authenticator = new HttpBasicAuthenticator(settings.EMail, settings.ApiKey);
request.RequestFormat = DataFormat.Json;
request.AddJsonBody(new { SERVICE = "customer.get", FILTER = new { TERM = term } });
var response = await client.ExecuteAsync<List<Customer>>(request);
if (response.StatusCode == System.Net.HttpStatusCode.OK)
{
return response.Data;
}
return customers;
}
}

View File

@ -1,4 +1,5 @@
using CommunityToolkit.Mvvm.DependencyInjection; using CommunityToolkit.Mvvm.DependencyInjection;
using FastBill.Services;
using FastBill.ViewModels; using FastBill.ViewModels;
using FastBill.Views; using FastBill.Views;
using PSCHelpdesk.Shared.Plugin; using PSCHelpdesk.Shared.Plugin;
@ -16,6 +17,13 @@ public class FastBill: Contract
public void Configure() public void Configure()
{ {
var menuService = Ioc.Default.GetRequiredService<IMenuService>();
var fastBillTab = new PSCHelpdesk.Shared.Menu.Item()
{
Header = "Customers",
CommandParameter = new CustomerViewModel(new CustomerService())
};
menuService.AddMenuItem(fastBillTab);
var settingsService = Ioc.Default.GetRequiredService<ISettingsService>(); var settingsService = Ioc.Default.GetRequiredService<ISettingsService>();
var fastbillSettings = new Item() var fastbillSettings = new Item()
{ {
@ -27,6 +35,6 @@ public class FastBill: Contract
public List<Type> LoadViews() public List<Type> LoadViews()
{ {
return [typeof(SettingsView)]; return [typeof(SettingsView), typeof(CustomerView)];
} }
} }

View File

@ -13,6 +13,7 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="CommunityToolkit.Mvvm" Version="8.3.2" /> <PackageReference Include="CommunityToolkit.Mvvm" Version="8.3.2" />
<PackageReference Include="ReactiveUI" Version="20.1.1" /> <PackageReference Include="ReactiveUI" Version="20.1.1" />
<PackageReference Include="RestSharp" Version="112.1.0" />
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -0,0 +1,7 @@
namespace FastBill.Models;
public class Customer
{
public string CustomerNr { get; set; }
public string CustomerId { get; set; }
}

View File

@ -0,0 +1,28 @@
using CommunityToolkit.Mvvm.DependencyInjection;
using FastBill.Models;
using PSCHelpdesk.Shared.Service;
using PSCHelpdesk.Shared.Setting;
namespace FastBill.Services;
public class CustomerService
{
private readonly SettingsManager? _settingsManager;
private readonly Api.Customers _customerApi;
public CustomerService()
{
_settingsManager = (SettingsManager)Ioc.Default.GetService<ISettingsManager>();
_customerApi = new Api.Customers();
}
public async Task<List<Customer>> SearchCustomer(string term)
{
var settings = new Settings();
_settingsManager.LoadPluginSettings("FastbillSettings", settings);
List<Customer> customers = new List<Customer>();
customers = await _customerApi.SearchCustomer(settings, term);
return customers;
}
}

View File

@ -0,0 +1,31 @@
using System.Reactive;
using FastBill.Services;
using PSCHelpdesk.Shared.ViewModels;
using ReactiveUI;
namespace FastBill.ViewModels;
public class CustomerViewModel: ViewModelBase, IViewModelBase
{
public string _term;
public string Term
{
get => _term;
set => SetAndRaisePropertyChanged(ref _term, value);
}
private CustomerService _customerService;
public ReactiveCommand<Unit, Unit> SearchCustomer { get; }
public CustomerViewModel(CustomerService customerService)
{
_customerService = customerService;
SearchCustomer = ReactiveCommand.Create(searchTerm);
}
async void searchTerm()
{
var list = await _customerService.SearchCustomer(Term);
}
}

View File

@ -0,0 +1,15 @@
<UserControl xmlns="https://github.com/avaloniaui"
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:FastBill.ViewModels"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:DataType="vm:CustomerViewModel"
x:Class="FastBill.Views.CustomerView">
<Design.DataContext><vm:CustomerViewModel></vm:CustomerViewModel></Design.DataContext>
<StackPanel>
<TextBox Text="{Binding Term}"></TextBox>
<Button Content="Search" Command="{Binding SearchCustomer}"></Button>
</StackPanel>
</UserControl>

View File

@ -0,0 +1,13 @@
using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
namespace FastBill.Views;
public partial class CustomerView : UserControl
{
public CustomerView()
{
InitializeComponent();
}
}

View File

@ -0,0 +1,48 @@
<Styles xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:controls="using:PSCHelpdesk.Plugins.HetznerServer.Controls">
<Design.PreviewWith>
<controls:ServerDetailView />
</Design.PreviewWith>
<Style Selector="controls|ServerDetailView">
<!-- Set Defaults -->
<Setter Property="Template">
<ControlTemplate>
<StackPanel>
<TextBlock Text="{Binding SelectedServer.Name}" FontSize="24"/>
<TabControl>
<TabItem Header="Domains">
<StackPanel>
<ListBox ItemsSource="{Binding SelectedServer.Domains}" Margin="0" Padding="0">
<ListBox.Styles>
<Style Selector="ListBoxItem">
<Setter Property="Padding" Value="0" />
</Style>
</ListBox.Styles>
<ListBox.ItemTemplate>
<DataTemplate>
<Border Padding="1" Margin="0">
<!--<TextBox Text="{Binding Name}" DoubleTapped="InputElement_OnDoubleTapped"></TextBox>-->
<HyperlinkButton Content="{Binding LinkDomain}" NavigateUri="{Binding LinkDomain}"></HyperlinkButton>
</Border>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</StackPanel>
</TabItem>
<TabItem Header="Settings">
<StackPanel>
<TextBlock Text="PSC ApiKey" Margin="0 5"></TextBlock>
<TextBox Text="{Binding SelectedServer.PscApiKey}"></TextBox>
<TextBlock Text="FastBill Id" Margin="0 5"></TextBlock>
<TextBox Text="{Binding SelectedServer.FastBillId}"></TextBox>
<Button Content="Save" Command="{Binding RunTheThing}"></Button>
</StackPanel>
</TabItem>
</TabControl>
</StackPanel>
</ControlTemplate>
</Setter>
</Style>
</Styles>

View File

@ -0,0 +1,9 @@
using Avalonia;
using Avalonia.Controls;
using Avalonia.Controls.Primitives;
namespace PSCHelpdesk.Plugins.HetznerServer.Controls;
public class ServerDetailView : TemplatedControl
{
}

View File

@ -32,6 +32,7 @@
<PackageReference Include="Avalonia.ReactiveUI" Version="11.2.0" Private="false" /> <PackageReference Include="Avalonia.ReactiveUI" Version="11.2.0" Private="false" />
<PackageReference Include="Avalonia.Xaml.Behaviors" Version="11.2.0" Private="false" /> <PackageReference Include="Avalonia.Xaml.Behaviors" Version="11.2.0" Private="false" />
<PackageReference Include="Avalonia.Xaml.Interactions" Version="11.2.0" Private="false" /> <PackageReference Include="Avalonia.Xaml.Interactions" Version="11.2.0" Private="false" />
<PackageReference Include="CommunityToolkit.Mvvm" Version="8.3.2" />
<PackageReference Include="HetznerCloud.API" Version="1.1.9" Private="false" /> <PackageReference Include="HetznerCloud.API" Version="1.1.9" Private="false" />
<PackageReference Include="Material.Icons.Avalonia" Version="2.1.10" /> <PackageReference Include="Material.Icons.Avalonia" Version="2.1.10" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Private="false" Version="8.0.1" /> <PackageReference Include="Microsoft.Extensions.DependencyInjection" Private="false" Version="8.0.1" />

View File

@ -1,15 +1,18 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
using System.Runtime.CompilerServices; using System.Runtime.CompilerServices;
using System.Xml.Linq;
using Avalonia.Media; using Avalonia.Media;
using CommunityToolkit.Mvvm.DependencyInjection;
using Material.Icons; using Material.Icons;
using PSCHelpdesk.Shared.Service;
using ReactiveUI; using ReactiveUI;
namespace PSCHelpdesk.Plugins.HetznerServer.Models; namespace PSCHelpdesk.Plugins.HetznerServer.Models;
public class Server : ReactiveObject public class Server : ReactiveObject
{ {
public long Id { get; set; } public long ServerId { get; set; }
public string Name { get; set; } public string Name { get; set; }
private string _pscApiKey; private string _pscApiKey;
@ -90,9 +93,9 @@ public class Server : ReactiveObject
public string Ipv4 { get; set; } public string Ipv4 { get; set; }
public string Ipv6 { get; set; } public string Ipv6 { get; set; }
public Server(long id, string name, string type, string status, string ipv4, string ipv6) public Server(long serverId, string name, string type, string status, string ipv4, string ipv6)
{ {
Id = id; ServerId = serverId;
Name = name; Name = name;
Type = type; Type = type;
Status = status; Status = status;

View File

@ -2,12 +2,14 @@ namespace PSCHelpdesk.Plugins.HetznerServer.Models;
public class ServerSetting public class ServerSetting
{ {
public string Id { get; set; } public long ServerId { get; set; }
public string ApiKey { get; set; } public string PscApiKey { get; set; }
public string FastBillId { get; set; }
public ServerSetting() public ServerSetting(long serverId, string pscApiKey, string fastBillId)
{ {
Id = Guid.NewGuid().ToString(); ServerId = serverId;
ApiKey = string.Empty; PscApiKey = pscApiKey;
FastBillId = fastBillId;
} }
} }

View File

@ -19,7 +19,7 @@ namespace PSCHelpdesk.Plugins.HetznerServer.Service;
public class ServerService: IServerService public class ServerService: IServerService
{ {
public SourceCache<Server, long> SourceCache = new (x => x.Id); public SourceCache<Server, long> SourceCache = new (x => x.ServerId);
private SettingsManager _settingsManager; private SettingsManager _settingsManager;
private readonly DispatcherTimer _reloadTimer = new DispatcherTimer(); private readonly DispatcherTimer _reloadTimer = new DispatcherTimer();
private string _searchText = string.Empty; private string _searchText = string.Empty;
@ -73,8 +73,18 @@ public class ServerService: IServerService
{ {
_reloadTimer.Stop(); _reloadTimer.Stop();
}); });
var settings = new Settings();
_settingsManager.LoadPluginSettings("HetznerSettings", settings);
foreach (Server serv in SourceCache.Items) foreach (Server serv in SourceCache.Items)
{ {
if (settings.ServerSettings.Count(e => e.ServerId == serv.ServerId) > 0)
{
serv.FastBillId = settings.ServerSettings.First(e => e.ServerId == serv.ServerId).FastBillId;
serv.PscApiKey = settings.ServerSettings.First(e => e.ServerId == serv.ServerId).PscApiKey;
}
var connectionInfo = new ConnectionInfo(serv.Ipv4, var connectionInfo = new ConnectionInfo(serv.Ipv4,
"root", "root",
new PrivateKeyAuthenticationMethod("root", new PrivateKeyFile(this._settingsManager.CoreSettings.PrivateSSHKeyPath))); new PrivateKeyAuthenticationMethod("root", new PrivateKeyFile(this._settingsManager.CoreSettings.PrivateSSHKeyPath)));
@ -185,4 +195,20 @@ public class ServerService: IServerService
this._reloadTimer.Start(); this._reloadTimer.Start();
}); });
} }
public void SaveSettings(Server selectedServer)
{
var settings = new Settings();
_settingsManager.LoadPluginSettings("HetznerSettings", settings);
if (settings.ServerSettings.Count(e => e.ServerId == selectedServer.ServerId) > 0)
{
settings.ServerSettings.First(e => e.ServerId == selectedServer.ServerId).FastBillId = selectedServer.FastBillId;
settings.ServerSettings.First(e => e.ServerId == selectedServer.ServerId).PscApiKey = selectedServer.PscApiKey;
}
else
{
settings.ServerSettings.Add(new ServerSetting(selectedServer.ServerId, selectedServer.PscApiKey, selectedServer.FastBillId));
}
_settingsManager.SavePluginSettings("HetznerSettings", settings);
}
} }

View File

@ -37,8 +37,8 @@ public partial class ServerViewModel : ViewModelBase, IViewModelBase
ServerService = _serverService; ServerService = _serverService;
ServerService.SourceCache.Connect() ServerService.SourceCache.Connect()
// Sort Ascending on the OrderIndex property // Sort Ascending on the OrderIndex property
.Sort(SortExpressionComparer<Server>.Ascending(t => t.Id)) .Sort(SortExpressionComparer<Server>.Ascending(t => t.ServerId))
.Filter(x => x.Name.Contains(_searchText, StringComparison.OrdinalIgnoreCase) || x.Domains.Count(d => d.Name.Contains(_searchText, StringComparison.OrdinalIgnoreCase)) > 0) .Filter(x => x.Name.Contains(_searchText, StringComparison.OrdinalIgnoreCase) || x.ServerId.ToString().Contains(_searchText, StringComparison.OrdinalIgnoreCase) || x.Domains.Count(d => d.Name.Contains(_searchText, StringComparison.OrdinalIgnoreCase)) > 0)
// Bind to our ReadOnlyObservableCollection<T> // Bind to our ReadOnlyObservableCollection<T>
.Bind(out _server) .Bind(out _server)
// Subscribe for changes // Subscribe for changes
@ -97,6 +97,6 @@ public partial class ServerViewModel : ViewModelBase, IViewModelBase
void saveServerSettings() void saveServerSettings()
{ {
ServerService.SaveSettings(SelectedServer);
} }
} }

View File

@ -4,10 +4,8 @@
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
xmlns:vm="clr-namespace:PSCHelpdesk.Plugins.HetznerServer.ViewModels" xmlns:vm="clr-namespace:PSCHelpdesk.Plugins.HetznerServer.ViewModels"
xmlns:views="clr-namespace:PSCHelpdesk.Plugins.HetznerServer.Views"
x:Class="PSCHelpdesk.Plugins.HetznerServer.Views.ServerDetailView"> x:Class="PSCHelpdesk.Plugins.HetznerServer.Views.ServerDetailView">
<Design.DataContext>
<vm:ServerViewModel></vm:ServerViewModel>
</Design.DataContext>
<StackPanel> <StackPanel>
<TextBlock Text="{Binding SelectedServer.Name}" FontSize="24"/> <TextBlock Text="{Binding SelectedServer.Name}" FontSize="24"/>
<TabControl> <TabControl>

View File

@ -1,6 +1,9 @@
using Avalonia; using Avalonia;
using Avalonia.Controls; using Avalonia.Controls;
using Avalonia.Interactivity;
using Avalonia.Markup.Xaml; using Avalonia.Markup.Xaml;
using PSCHelpdesk.Plugins.HetznerServer.Models;
using PSCHelpdesk.Plugins.HetznerServer.ViewModels;
namespace PSCHelpdesk.Plugins.HetznerServer.Views; namespace PSCHelpdesk.Plugins.HetznerServer.Views;

View File

@ -49,7 +49,7 @@
</DataTemplate> </DataTemplate>
</DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn> </DataGridTemplateColumn>
<DataGridTextColumn Width="75" Header="Id" Binding="{Binding Id}"/> <DataGridTextColumn Width="75" Header="Id" Binding="{Binding ServerId}"/>
<DataGridTextColumn Width="*" Header="Name" Binding="{Binding Name}" /> <DataGridTextColumn Width="*" Header="Name" Binding="{Binding Name}" />
<DataGridTextColumn Width="60" Header="Status" Binding="{Binding Status}" CellStyleClasses="status" /> <DataGridTextColumn Width="60" Header="Status" Binding="{Binding Status}" CellStyleClasses="status" />
<DataGridTextColumn Width="45" Header="Type" Binding="{Binding Type}" /> <DataGridTextColumn Width="45" Header="Type" Binding="{Binding Type}" />

View File

@ -32,6 +32,7 @@
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AIBrush_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FSourcesCache_003Fbe37f94ace60e93760f363e28be5136e9e82a6dce891cef5f298e2bcd812c256_003FIBrush_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AIBrush_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FSourcesCache_003Fbe37f94ace60e93760f363e28be5136e9e82a6dce891cef5f298e2bcd812c256_003FIBrush_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AIoc_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FSourcesCache_003F2e6883f773fb7c69a15db509adac9a0c068e4ca54fa119e835fd2324311c3b_003FIoc_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AIoc_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FSourcesCache_003F2e6883f773fb7c69a15db509adac9a0c068e4ca54fa119e835fd2324311c3b_003FIoc_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AIoc_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FSourcesCache_003Ffa3c59274a754721f822d1776be91c7ffdd37ff4219098396aa16ba1fc5447_003FIoc_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AIoc_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FSourcesCache_003Ffa3c59274a754721f822d1776be91c7ffdd37ff4219098396aa16ba1fc5447_003FIoc_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AIoc_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FSourcesCache_003Ffa3c59274a754721f822d1776be91c7ffdd37ff4219098396aa16ba1fc5447_003FIoc_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AIoc_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FSourcesCache_003F2e6883f773fb7c69a15db509adac9a0c068e4ca54fa119e835fd2324311c3b_003FIoc_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AIoc_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FSourcesCache_003F2e6883f773fb7c69a15db509adac9a0c068e4ca54fa119e835fd2324311c3b_003FIoc_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AIpv6_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F95e899f2b13d4189874af98ec00443321e400_003Ff7_003F54c88032_003FIpv6_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AIpv6_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F95e899f2b13d4189874af98ec00443321e400_003Ff7_003F54c88032_003FIpv6_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AIServerActionsService_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fa924c6fef45b419cbbc71e86813a9b3a35000_003Ff5_003Fd14c12da_003FIServerActionsService_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AIServerActionsService_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fa924c6fef45b419cbbc71e86813a9b3a35000_003Ff5_003Fd14c12da_003FIServerActionsService_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>

View File

@ -12,6 +12,7 @@
"Avalonia.ReactiveUI": "11.2.0", "Avalonia.ReactiveUI": "11.2.0",
"Avalonia.Xaml.Behaviors": "11.2.0", "Avalonia.Xaml.Behaviors": "11.2.0",
"Avalonia.Xaml.Interactions": "11.2.0", "Avalonia.Xaml.Interactions": "11.2.0",
"CommunityToolkit.Mvvm": "8.3.2",
"HetznerCloud.API": "1.1.9", "HetznerCloud.API": "1.1.9",
"Material.Icons.Avalonia": "2.1.10", "Material.Icons.Avalonia": "2.1.10",
"Microsoft.Extensions.DependencyInjection": "8.0.1", "Microsoft.Extensions.DependencyInjection": "8.0.1",
@ -193,6 +194,14 @@
} }
} }
}, },
"CommunityToolkit.Mvvm/8.3.2": {
"runtime": {
"lib/net8.0/CommunityToolkit.Mvvm.dll": {
"assemblyVersion": "8.3.0.0",
"fileVersion": "8.3.2.1"
}
}
},
"DynamicData/8.4.1": { "DynamicData/8.4.1": {
"dependencies": { "dependencies": {
"System.Reactive": "6.0.1" "System.Reactive": "6.0.1"
@ -400,6 +409,13 @@
"path": "avalonia.xaml.interactivity/11.2.0", "path": "avalonia.xaml.interactivity/11.2.0",
"hashPath": "avalonia.xaml.interactivity.11.2.0.nupkg.sha512" "hashPath": "avalonia.xaml.interactivity.11.2.0.nupkg.sha512"
}, },
"CommunityToolkit.Mvvm/8.3.2": {
"type": "package",
"serviceable": true,
"sha512": "sha512-m8EolE1A0Updj68WTsZSGI6VWb6mUqHPh7QFo0kt7+JPhYMNXRS1ch8TS/oITAdcxTLrwMOp3ku1KjeG1/Zdpg==",
"path": "communitytoolkit.mvvm/8.3.2",
"hashPath": "communitytoolkit.mvvm.8.3.2.nupkg.sha512"
},
"DynamicData/8.4.1": { "DynamicData/8.4.1": {
"type": "package", "type": "package",
"serviceable": true, "serviceable": true,

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.