From 6daaa39b8c7b5729eb5e0207ec2e0a29fa8ca5da Mon Sep 17 00:00:00 2001 From: TheXamlGuy Date: Mon, 22 Jan 2024 22:45:44 +0000 Subject: [PATCH] Refactor widget configuration so only the very low configuration gets written first. The actual configuration are only to be written once the widget has been turned on by the user --- .../ContextualWidget.cs | 1 - .../Lifecycles/MediaControllerWidget.cs | 1 - Hyperbar.Windows.Primary/PrimaryWidget.cs | 1 - Hyperbar.Windows/App.xaml.cs | 3 --- Hyperbar/Widgets/IWidgetHost.cs | 7 ++----- Hyperbar/Widgets/WidgetBuilder.cs | 19 ++++++++++------- Hyperbar/Widgets/WidgetConfiguration.cs | 21 ++++++++----------- .../Widgets/WidgetConfigurationHandler.cs | 11 ++++++++++ Hyperbar/Widgets/WidgetHandler.cs | 2 +- Hyperbar/Widgets/WidgetHost.cs | 18 +++++++--------- Hyperbar/Widgets/WidgetHostHander.cs | 4 +++- 11 files changed, 45 insertions(+), 43 deletions(-) create mode 100644 Hyperbar/Widgets/WidgetConfigurationHandler.cs diff --git a/Hyperbar.Windows.Contextual/ContextualWidget.cs b/Hyperbar.Windows.Contextual/ContextualWidget.cs index c2db868..998c998 100644 --- a/Hyperbar.Windows.Contextual/ContextualWidget.cs +++ b/Hyperbar.Windows.Contextual/ContextualWidget.cs @@ -8,7 +8,6 @@ public class ContextualWidget : public IWidgetBuilder Create() => WidgetBuilder.Configure(args => { - args.Id = Guid.Parse("d3030852-8d4a-4fbb-9aa5-96dff3dfa06c"); args.Name = "Contextual commands"; }).ConfigureServices(args => diff --git a/Hyperbar.Windows.MediaController/Lifecycles/MediaControllerWidget.cs b/Hyperbar.Windows.MediaController/Lifecycles/MediaControllerWidget.cs index 78d8842..ce16f46 100644 --- a/Hyperbar.Windows.MediaController/Lifecycles/MediaControllerWidget.cs +++ b/Hyperbar.Windows.MediaController/Lifecycles/MediaControllerWidget.cs @@ -10,7 +10,6 @@ public class MediaControllerWidget : public IWidgetBuilder Create() => WidgetBuilder.Configure(args => { - args.Id = Guid.Parse("1667a800-ec5a-4d39-aa75-4f5ee95bb9f1"); args.Name = "Media controller"; }).ConfigureServices(args => { diff --git a/Hyperbar.Windows.Primary/PrimaryWidget.cs b/Hyperbar.Windows.Primary/PrimaryWidget.cs index 7f593f2..9ef738d 100644 --- a/Hyperbar.Windows.Primary/PrimaryWidget.cs +++ b/Hyperbar.Windows.Primary/PrimaryWidget.cs @@ -9,7 +9,6 @@ public class PrimaryWidget : public IWidgetBuilder Create() => WidgetBuilder.Configure(args => { - args.Id = Guid.Parse("cfdfe07c-d9d6-4174-ae41-988ca24d2e10"); args.Name = "Primary commands"; }).ConfigureServices(services => { diff --git a/Hyperbar.Windows/App.xaml.cs b/Hyperbar.Windows/App.xaml.cs index e8e8c85..c7ad4b5 100644 --- a/Hyperbar.Windows/App.xaml.cs +++ b/Hyperbar.Windows/App.xaml.cs @@ -64,9 +64,6 @@ public partial class App : services.AddContentTemplate(); })); - //services.AddWidget(); - //services.AddWidget(); - //services.AddTransient(provider => //{ // static IEnumerable Resolve(IServiceProvider services) diff --git a/Hyperbar/Widgets/IWidgetHost.cs b/Hyperbar/Widgets/IWidgetHost.cs index cb70baf..7e2c03d 100644 --- a/Hyperbar/Widgets/IWidgetHost.cs +++ b/Hyperbar/Widgets/IWidgetHost.cs @@ -1,10 +1,7 @@ namespace Hyperbar; -public interface IWidgetHost +public interface IWidgetHost : + IInitializer { IServiceProvider Services { get; } - - Task StartAsync(); - - Task StopAsync(); } diff --git a/Hyperbar/Widgets/WidgetBuilder.cs b/Hyperbar/Widgets/WidgetBuilder.cs index 2aa914b..f2665d3 100644 --- a/Hyperbar/Widgets/WidgetBuilder.cs +++ b/Hyperbar/Widgets/WidgetBuilder.cs @@ -28,8 +28,11 @@ public class WidgetBuilder(TConfiguration configuration) : services.AddScoped(); services.AddScoped(); + services.AddHandler(); - services.AddConfiguration(configuration); + //services.AddConfiguration(configuration); + services.AddConfiguration(section: configuration.GetType().Name, + configuration: configuration); }); public static IWidgetBuilder Configure(Action configurationDelegate) @@ -44,13 +47,13 @@ public class WidgetBuilder(TConfiguration configuration) : { IHost host = hostBuilder.Build(); - if (host.Services.GetRequiredService>() - is IConfigurationInitializer configurationInitializer) - { - configurationInitializer.InitializeAsync() - .GetAwaiter() - .GetResult(); - } + //if (host.Services.GetRequiredService>() + // is IConfigurationInitializer configurationInitializer) + //{ + // configurationInitializer.InitializeAsync() + // .GetAwaiter() + // .GetResult(); + //} return (IWidgetHost)ActivatorUtilities.CreateInstance(host.Services, typeof(WidgetHost), host); diff --git a/Hyperbar/Widgets/WidgetConfiguration.cs b/Hyperbar/Widgets/WidgetConfiguration.cs index 200d88d..ad8db72 100644 --- a/Hyperbar/Widgets/WidgetConfiguration.cs +++ b/Hyperbar/Widgets/WidgetConfiguration.cs @@ -1,19 +1,16 @@ -namespace Hyperbar; +using System.Text.Json.Serialization; -//public interface IWidgetConfiguration -//{ -// Guid Id { get; set; } +namespace Hyperbar; -// string? Name { get; set; } - -// string? Description { get; set; } -//} - -public abstract class WidgetConfiguration +public class WidgetConfiguration { - public Guid Id { get; set; } = Guid.NewGuid(); + public string? Description { get; set; } + + [JsonInclude] + internal Guid Id { get; set; } = Guid.NewGuid(); public string? Name { get; set; } - public string? Description { get; set; } + [JsonInclude] + internal bool IsAvailable { get; set; } } diff --git a/Hyperbar/Widgets/WidgetConfigurationHandler.cs b/Hyperbar/Widgets/WidgetConfigurationHandler.cs new file mode 100644 index 0000000..297bd0d --- /dev/null +++ b/Hyperbar/Widgets/WidgetConfigurationHandler.cs @@ -0,0 +1,11 @@ +namespace Hyperbar; + +public class WidgetConfigurationHandler : + INotificationHandler> +{ + public Task Handle(ConfigurationChanged notification, + CancellationToken cancellationToken) + { + throw new NotImplementedException(); + } +} diff --git a/Hyperbar/Widgets/WidgetHandler.cs b/Hyperbar/Widgets/WidgetHandler.cs index 84b716e..af55de5 100644 --- a/Hyperbar/Widgets/WidgetHandler.cs +++ b/Hyperbar/Widgets/WidgetHandler.cs @@ -21,8 +21,8 @@ public class WidgetHandler(IProxyServiceCollection typedServices }); IWidgetHost host = builder.Build(); + await host.InitializeAsync(); - await host.StartAsync(); await mediator.PublishAsync(new Created(host), cancellationToken); } diff --git a/Hyperbar/Widgets/WidgetHost.cs b/Hyperbar/Widgets/WidgetHost.cs index 8fc7e67..91b0704 100644 --- a/Hyperbar/Widgets/WidgetHost.cs +++ b/Hyperbar/Widgets/WidgetHost.cs @@ -2,24 +2,22 @@ namespace Hyperbar; public class WidgetHost(IHost host, + IEnumerable initializers, IProxyService proxyMediator) : IWidgetHost { public IServiceProvider Services => host.Services; - public async Task StartAsync() + public async Task InitializeAsync() { - if (proxyMediator.Proxy is IMediator mediator) + foreach (IInitializer initializer in initializers) { - await mediator.PublishAsync(new Started(this)); + await initializer.InitializeAsync(); } - } - public async Task StopAsync() - { - if (proxyMediator.Proxy is IMediator mediator) - { - await mediator.SendAsync(new Started(this)); - } + //if (proxyMediator.Proxy is IMediator mediator) + //{ + // await mediator.PublishAsync(new Started(this)); + //} } } \ No newline at end of file diff --git a/Hyperbar/Widgets/WidgetHostHander.cs b/Hyperbar/Widgets/WidgetHostHander.cs index 75796f8..4ff8702 100644 --- a/Hyperbar/Widgets/WidgetHostHander.cs +++ b/Hyperbar/Widgets/WidgetHostHander.cs @@ -7,7 +7,9 @@ public class WidgetHostHander : public Task Handle(Started notification, CancellationToken cancellationToken) { - throw new NotImplementedException(); + // throw new NotImplementedException(); + + return Task.CompletedTask; } public Task Handle(Stopped notification,