From 7b831b6c1f4b37e6ffc072f11c56aff6e08449dd Mon Sep 17 00:00:00 2001
From: estrogen elf <87099578+BlossomiShymae@users.noreply.github.com>
Date: Thu, 12 Jun 2025 19:26:31 -0500
Subject: [PATCH] feat: fubar
---
Needlework.Net/App.axaml | 6 +-
Needlework.Net/App.axaml.cs | 78 ++++-
.../EnumerableToVisibilityConverter.cs | 33 +++
.../NullableToVisibilityConverter.cs | 23 ++
Needlework.Net/DataSource.cs | 65 ++--
.../Extensions/ServiceCollectionExtensions.cs | 22 --
Needlework.Net/Logger.cs | 9 +-
.../Messages/InfoBarUpdateMessage.cs | 9 -
.../Messages/OopsiesDialogRequestedMessage.cs | 8 -
.../Messages/ResponseUpdatedMessage.cs | 8 -
Needlework.Net/Models/GithubRelease.cs | 2 +-
Needlework.Net/Models/Notification.cs | 9 +
Needlework.Net/Needlework.Net.csproj | 31 +-
Needlework.Net/Program.cs | 45 +--
.../Services/NotificationService.cs | 19 ++
Needlework.Net/ViewLocator.cs | 50 ----
.../ViewModels/MainWindow/InfoBarViewModel.cs | 26 --
.../MainWindow/MainWindowViewModel.cs | 280 +++++++-----------
.../MainWindow/NotificationViewModel.cs | 36 +++
.../ViewModels/Pages/About/AboutViewModel.cs | 16 +
.../ViewModels/Pages/AboutViewModel.cs | 32 --
.../Pages/Console/ConsoleViewModel.cs | 66 +++++
.../ViewModels/Pages/ConsoleViewModel.cs | 44 ---
.../EndpointSearchDetailsViewModel.cs | 35 +++
....cs => EndpointTabItemContentViewModel.cs} | 37 ++-
.../Endpoints/EndpointTabItemViewModel.cs | 29 ++
.../Endpoints/EndpointTabListViewModel.cs | 42 +++
.../Pages/Endpoints/EndpointViewModel.cs | 48 ---
.../Pages/Endpoints/EndpointsTabViewModel.cs | 83 ------
.../Pages/Endpoints/EndpointsViewModel.cs | 120 +++++---
.../Pages/Endpoints/OperationViewModel.cs | 56 ++--
.../Pages/Endpoints/ParameterViewModel.cs | 19 +-
.../Pages/Endpoints/PathOperationViewModel.cs | 42 +--
.../Pages/Endpoints/PluginViewModel.cs | 59 ++++
.../Pages/Endpoints/PropertyClassViewModel.cs | 26 +-
.../Pages/Endpoints/PropertyEnumViewModel.cs | 8 +-
.../Pages/Endpoints/PropertyFieldViewModel.cs | 8 +-
.../Pages/Endpoints/ResponseViewModel.cs | 30 +-
.../ViewModels/Pages/Home/HomeViewModel.cs | 26 ++
.../ViewModels/Pages/Home/LibraryViewModel.cs | 15 +
.../ViewModels/Pages/HomeViewModel.cs | 34 ---
Needlework.Net/ViewModels/Pages/PageBase.cs | 18 +-
.../Pages/Websocket/EventViewModel.cs | 6 +-
.../Pages/Websocket/WebsocketViewModel.cs | 165 ++++++-----
.../ViewModels/Shared/RequestViewModel.cs | 138 ++++-----
...{MainWindowView.axaml => MainWindow.axaml} | 40 +--
.../Views/MainWindow/MainWindow.axaml.cs | 70 +++++
.../Views/MainWindow/MainWindowView.axaml.cs | 30 --
.../Views/MainWindow/NotificationView.axaml | 20 ++
.../MainWindow/NotificationView.axaml.cs | 28 ++
.../AboutPage.axaml} | 5 +-
.../Views/Pages/About/AboutPage.axaml.cs | 15 +
Needlework.Net/Views/Pages/AboutView.axaml.cs | 11 -
.../ConsolePage.axaml} | 39 ++-
.../Views/Pages/Console/ConsolePage.axaml.cs | 59 ++++
.../Views/Pages/ConsoleView.axaml.cs | 61 ----
.../Endpoints/EndpointSearchDetailsView.axaml | 16 +
.../EndpointSearchDetailsView.axaml.cs | 23 ++
.../EndpointTabItemContentView.axaml | 48 +++
.../EndpointTabItemContentView.axaml.cs | 25 ++
.../Pages/Endpoints/EndpointTabListView.axaml | 30 ++
.../Endpoints/EndpointTabListView.axaml.cs | 20 ++
.../Pages/Endpoints/EndpointView.axaml.cs | 94 ------
.../Endpoints/EndpointsNavigationView.axaml | 32 --
.../EndpointsNavigationView.axaml.cs | 11 -
...ointsTabView.axaml => EndpointsPage.axaml} | 44 +--
.../Pages/Endpoints/EndpointsPage.axaml.cs | 38 +++
.../Pages/Endpoints/EndpointsTabView.axaml.cs | 24 --
.../Views/Pages/Endpoints/EndpointsView.axaml | 29 --
.../Pages/Endpoints/EndpointsView.axaml.cs | 11 -
.../Pages/Endpoints/PathOperationView.axaml | 37 +++
.../Endpoints/PathOperationView.axaml.cs | 18 ++
.../{EndpointView.axaml => PluginView.axaml} | 177 +++--------
.../Views/Pages/Endpoints/PluginView.axaml.cs | 79 +++++
.../Pages/Endpoints/PropertyClassView.axaml | 31 ++
.../Endpoints/PropertyClassView.axaml.cs | 28 ++
.../{HomeView.axaml => Home/HomePage.axaml} | 58 +---
.../Views/Pages/Home/HomePage.axaml.cs | 15 +
.../Views/Pages/Home/LibraryView.axaml | 25 ++
.../Views/Pages/Home/LibraryView.axaml.cs | 28 ++
Needlework.Net/Views/Pages/HomeView.axaml.cs | 11 -
.../Views/Pages/WebSocket/EventView.axaml | 25 ++
.../Views/Pages/WebSocket/EventView.axaml.cs | 24 ++
.../Views/Pages/WebSocket/WebSocketPage.axaml | 67 +++++
.../Pages/WebSocket/WebSocketPage.axaml.cs | 93 ++++++
.../Views/Pages/WebsocketView.axaml | 89 ------
.../Views/Pages/WebsocketView.axaml.cs | 73 -----
87 files changed, 2011 insertions(+), 1651 deletions(-)
create mode 100644 Needlework.Net/Converters/EnumerableToVisibilityConverter.cs
create mode 100644 Needlework.Net/Converters/NullableToVisibilityConverter.cs
delete mode 100644 Needlework.Net/Extensions/ServiceCollectionExtensions.cs
delete mode 100644 Needlework.Net/Messages/InfoBarUpdateMessage.cs
delete mode 100644 Needlework.Net/Messages/OopsiesDialogRequestedMessage.cs
delete mode 100644 Needlework.Net/Messages/ResponseUpdatedMessage.cs
create mode 100644 Needlework.Net/Models/Notification.cs
create mode 100644 Needlework.Net/Services/NotificationService.cs
delete mode 100644 Needlework.Net/ViewLocator.cs
delete mode 100644 Needlework.Net/ViewModels/MainWindow/InfoBarViewModel.cs
create mode 100644 Needlework.Net/ViewModels/MainWindow/NotificationViewModel.cs
create mode 100644 Needlework.Net/ViewModels/Pages/About/AboutViewModel.cs
delete mode 100644 Needlework.Net/ViewModels/Pages/AboutViewModel.cs
create mode 100644 Needlework.Net/ViewModels/Pages/Console/ConsoleViewModel.cs
delete mode 100644 Needlework.Net/ViewModels/Pages/ConsoleViewModel.cs
create mode 100644 Needlework.Net/ViewModels/Pages/Endpoints/EndpointSearchDetailsViewModel.cs
rename Needlework.Net/ViewModels/Pages/Endpoints/{EndpointsNavigationViewModel.cs => EndpointTabItemContentViewModel.cs} (51%)
create mode 100644 Needlework.Net/ViewModels/Pages/Endpoints/EndpointTabItemViewModel.cs
create mode 100644 Needlework.Net/ViewModels/Pages/Endpoints/EndpointTabListViewModel.cs
delete mode 100644 Needlework.Net/ViewModels/Pages/Endpoints/EndpointViewModel.cs
delete mode 100644 Needlework.Net/ViewModels/Pages/Endpoints/EndpointsTabViewModel.cs
create mode 100644 Needlework.Net/ViewModels/Pages/Endpoints/PluginViewModel.cs
create mode 100644 Needlework.Net/ViewModels/Pages/Home/HomeViewModel.cs
create mode 100644 Needlework.Net/ViewModels/Pages/Home/LibraryViewModel.cs
delete mode 100644 Needlework.Net/ViewModels/Pages/HomeViewModel.cs
rename Needlework.Net/Views/MainWindow/{MainWindowView.axaml => MainWindow.axaml} (68%)
create mode 100644 Needlework.Net/Views/MainWindow/MainWindow.axaml.cs
delete mode 100644 Needlework.Net/Views/MainWindow/MainWindowView.axaml.cs
create mode 100644 Needlework.Net/Views/MainWindow/NotificationView.axaml
create mode 100644 Needlework.Net/Views/MainWindow/NotificationView.axaml.cs
rename Needlework.Net/Views/Pages/{AboutView.axaml => About/AboutPage.axaml} (92%)
create mode 100644 Needlework.Net/Views/Pages/About/AboutPage.axaml.cs
delete mode 100644 Needlework.Net/Views/Pages/AboutView.axaml.cs
rename Needlework.Net/Views/Pages/{ConsoleView.axaml => Console/ConsolePage.axaml} (71%)
create mode 100644 Needlework.Net/Views/Pages/Console/ConsolePage.axaml.cs
delete mode 100644 Needlework.Net/Views/Pages/ConsoleView.axaml.cs
create mode 100644 Needlework.Net/Views/Pages/Endpoints/EndpointSearchDetailsView.axaml
create mode 100644 Needlework.Net/Views/Pages/Endpoints/EndpointSearchDetailsView.axaml.cs
create mode 100644 Needlework.Net/Views/Pages/Endpoints/EndpointTabItemContentView.axaml
create mode 100644 Needlework.Net/Views/Pages/Endpoints/EndpointTabItemContentView.axaml.cs
create mode 100644 Needlework.Net/Views/Pages/Endpoints/EndpointTabListView.axaml
create mode 100644 Needlework.Net/Views/Pages/Endpoints/EndpointTabListView.axaml.cs
delete mode 100644 Needlework.Net/Views/Pages/Endpoints/EndpointView.axaml.cs
delete mode 100644 Needlework.Net/Views/Pages/Endpoints/EndpointsNavigationView.axaml
delete mode 100644 Needlework.Net/Views/Pages/Endpoints/EndpointsNavigationView.axaml.cs
rename Needlework.Net/Views/Pages/Endpoints/{EndpointsTabView.axaml => EndpointsPage.axaml} (59%)
create mode 100644 Needlework.Net/Views/Pages/Endpoints/EndpointsPage.axaml.cs
delete mode 100644 Needlework.Net/Views/Pages/Endpoints/EndpointsTabView.axaml.cs
delete mode 100644 Needlework.Net/Views/Pages/Endpoints/EndpointsView.axaml
delete mode 100644 Needlework.Net/Views/Pages/Endpoints/EndpointsView.axaml.cs
create mode 100644 Needlework.Net/Views/Pages/Endpoints/PathOperationView.axaml
create mode 100644 Needlework.Net/Views/Pages/Endpoints/PathOperationView.axaml.cs
rename Needlework.Net/Views/Pages/Endpoints/{EndpointView.axaml => PluginView.axaml} (52%)
create mode 100644 Needlework.Net/Views/Pages/Endpoints/PluginView.axaml.cs
create mode 100644 Needlework.Net/Views/Pages/Endpoints/PropertyClassView.axaml
create mode 100644 Needlework.Net/Views/Pages/Endpoints/PropertyClassView.axaml.cs
rename Needlework.Net/Views/Pages/{HomeView.axaml => Home/HomePage.axaml} (69%)
create mode 100644 Needlework.Net/Views/Pages/Home/HomePage.axaml.cs
create mode 100644 Needlework.Net/Views/Pages/Home/LibraryView.axaml
create mode 100644 Needlework.Net/Views/Pages/Home/LibraryView.axaml.cs
delete mode 100644 Needlework.Net/Views/Pages/HomeView.axaml.cs
create mode 100644 Needlework.Net/Views/Pages/WebSocket/EventView.axaml
create mode 100644 Needlework.Net/Views/Pages/WebSocket/EventView.axaml.cs
create mode 100644 Needlework.Net/Views/Pages/WebSocket/WebSocketPage.axaml
create mode 100644 Needlework.Net/Views/Pages/WebSocket/WebSocketPage.axaml.cs
delete mode 100644 Needlework.Net/Views/Pages/WebsocketView.axaml
delete mode 100644 Needlework.Net/Views/Pages/WebsocketView.axaml.cs
diff --git a/Needlework.Net/App.axaml b/Needlework.Net/App.axaml
index a0e5438..1829c04 100644
--- a/Needlework.Net/App.axaml
+++ b/Needlework.Net/App.axaml
@@ -7,12 +7,8 @@
xmlns:materialIcons="clr-namespace:Material.Icons.Avalonia;assembly=Material.Icons.Avalonia"
RequestedThemeVariant="Dark">
-
-
-
-
-
+
diff --git a/Needlework.Net/App.axaml.cs b/Needlework.Net/App.axaml.cs
index a1bee0d..aa0c9d4 100644
--- a/Needlework.Net/App.axaml.cs
+++ b/Needlework.Net/App.axaml.cs
@@ -2,18 +2,31 @@ using Avalonia;
using Avalonia.Controls;
using Avalonia.Controls.ApplicationLifetimes;
using Avalonia.Markup.Xaml;
-using Microsoft.Extensions.DependencyInjection;
+using Flurl.Http.Configuration;
+using Needlework.Net.Converters;
+using Needlework.Net.Services;
using Needlework.Net.ViewModels.MainWindow;
+using Needlework.Net.ViewModels.Pages;
+using Needlework.Net.ViewModels.Pages.About;
+using Needlework.Net.ViewModels.Pages.Console;
+using Needlework.Net.ViewModels.Pages.Endpoints;
+using Needlework.Net.ViewModels.Pages.Home;
+using Needlework.Net.ViewModels.Pages.WebSocket;
using Needlework.Net.Views.MainWindow;
-using System;
+using Needlework.Net.Views.Pages.About;
+using Needlework.Net.Views.Pages.Console;
+using Needlework.Net.Views.Pages.Endpoints;
+using Needlework.Net.Views.Pages.Home;
+using Needlework.Net.Views.Pages.WebSocket;
+using ReactiveUI;
+using Splat;
+using Splat.Serilog;
using System.Text.Json;
namespace Needlework.Net;
-public partial class App(IServiceProvider serviceProvider) : Application
+public partial class App : Application
{
- private readonly IServiceProvider _serviceProvider = serviceProvider;
-
public static JsonSerializerOptions JsonSerializerOptions { get; } = new()
{
WriteIndented = true,
@@ -31,15 +44,62 @@ public partial class App(IServiceProvider serviceProvider) : Application
public override void OnFrameworkInitializationCompleted()
{
+ RegisterValueConverters();
+ RegisterAppServices();
+ RegisterViews();
+ RegisterViewModels();
+
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
{
- desktop.MainWindow = new MainWindowView()
- {
- DataContext = _serviceProvider.GetRequiredService()
- };
+ desktop.MainWindow = new MainWindow() { DataContext = Locator.Current.GetService() };
MainWindow = desktop.MainWindow;
}
base.OnFrameworkInitializationCompleted();
}
+
+ private void RegisterValueConverters()
+ {
+ Locator.CurrentMutable.RegisterConstant(new NullableToVisibilityConverter());
+ Locator.CurrentMutable.RegisterConstant(new EnumerableToVisibilityConverter());
+ }
+
+ private static void RegisterViewModels()
+ {
+ Locator.CurrentMutable.RegisterConstant(new HomeViewModel());
+ Locator.CurrentMutable.RegisterConstant(new EndpointsViewModel());
+ Locator.CurrentMutable.RegisterConstant(new ConsoleViewModel());
+ Locator.CurrentMutable.RegisterConstant(new WebSocketViewModel());
+ Locator.CurrentMutable.RegisterConstant(new AboutViewModel());
+ Locator.CurrentMutable.RegisterConstant(new MainWindowViewModel());
+ }
+
+ private static void RegisterViews()
+ {
+ Locator.CurrentMutable.Register>(() => new LibraryView());
+ Locator.CurrentMutable.Register>(() => new NotificationView());
+ Locator.CurrentMutable.Register>(() => new EventView());
+ Locator.CurrentMutable.Register>(() => new EndpointTabListView());
+ Locator.CurrentMutable.Register>(() => new EndpointTabItemContentView());
+ Locator.CurrentMutable.Register>(() => new EndpointSearchDetailsView());
+ Locator.CurrentMutable.Register>(() => new PluginView());
+ Locator.CurrentMutable.Register>(() => new PropertyClassView());
+ Locator.CurrentMutable.Register>(() => new PathOperationView());
+
+ Locator.CurrentMutable.RegisterConstant>(new HomePage());
+ Locator.CurrentMutable.RegisterConstant>(new EndpointsPage());
+ Locator.CurrentMutable.RegisterConstant>(new ConsolePage());
+ Locator.CurrentMutable.RegisterConstant>(new WebSocketPage());
+ Locator.CurrentMutable.RegisterConstant>(new AboutPage());
+ }
+
+ private static void RegisterAppServices()
+ {
+ Locator.CurrentMutable.UseSerilogFullLogger(Logger.Setup());
+ Locator.CurrentMutable.RegisterConstant(new FlurlClientCache()
+ .Add("GithubClient", "https://api.github.com")
+ .Add("GithubUserContentClient", "https://raw.githubusercontent.com"));
+ Locator.CurrentMutable.RegisterConstant(new NotificationService());
+ Locator.CurrentMutable.RegisterConstant(new DataSource());
+ }
}
\ No newline at end of file
diff --git a/Needlework.Net/Converters/EnumerableToVisibilityConverter.cs b/Needlework.Net/Converters/EnumerableToVisibilityConverter.cs
new file mode 100644
index 0000000..7668abd
--- /dev/null
+++ b/Needlework.Net/Converters/EnumerableToVisibilityConverter.cs
@@ -0,0 +1,33 @@
+using ReactiveUI;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+
+namespace Needlework.Net.Converters
+{
+ public class EnumerableToVisibilityConverter : IBindingTypeConverter
+ {
+ public int GetAffinityForObjects(Type fromType, Type toType)
+ {
+ if (typeof(IEnumerable