Skip to content

Commit 792369d

Browse files
authored
Made light automation pipeline generic with TLight where TLight is ILight and moved from LightPipelineContext to context based service collection. (#196)
* Initial refactor of using TLight instead of ILight. * Making light notifications compatable with the use of generic lights. * Implemented CodeCasa.DependencyInjection * Using service provider with contexted scope. * Removing LightPipelineContext and using ServiceProvider with context instead. * Some code cleanup * Fixed unit tests and updated references. * Removed local dependency injection solution and replaced it with DependencyInjection.Composite. * Implemented light Notify methods without generic type for filtering. * Fixed warnings. * Implemented logic of ServiceScopedPipeline.
1 parent 564dab8 commit 792369d

70 files changed

Lines changed: 1179 additions & 1049 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

src/CodeCasa.AutomationPipelines.Lights.NetDaemon/Extensions/LightPipelineFactoryExtensions.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using CodeCasa.AutomationPipelines.Lights.Pipeline;
2+
using CodeCasa.Lights.NetDaemon;
23
using CodeCasa.Lights.NetDaemon.Extensions;
34
using NetDaemon.HassModel.Entities;
45

@@ -17,7 +18,7 @@ public static class LightPipelineFactoryExtensions
1718
/// <param name="pipelineBuilder">An action to configure the pipeline behavior.</param>
1819
/// <returns>An async disposable representing the created pipeline(s) that can be disposed to clean up resources.</returns>
1920
public static IAsyncDisposable SetupLightPipeline(this LightPipelineFactory lightPipelineFactory, ILightEntityCore lightEntity,
20-
Action<ILightTransitionPipelineConfigurator> pipelineBuilder)
21+
Action<ILightTransitionPipelineConfigurator<NetDaemonLight>> pipelineBuilder)
2122
{
2223
return lightPipelineFactory.SetupLightPipeline(lightEntity.AsLight(), pipelineBuilder);
2324
}

src/CodeCasa.AutomationPipelines.Lights.NetDaemon/Extensions/LightTransitionCycleConfiguratorExtensions.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using CodeCasa.AutomationPipelines.Lights.Cycle;
2+
using CodeCasa.Lights.NetDaemon;
23
using CodeCasa.Lights.NetDaemon.Extensions;
34
using NetDaemon.HassModel.Entities;
45

@@ -17,8 +18,8 @@ public static class LightTransitionCycleConfiguratorExtensions
1718
/// <param name="configure">An action to configure the cycle for this specific light.</param>
1819
/// <param name="excludedLightBehaviour">Specifies the behavior for lights not included in this scoped configuration. Defaults to <see cref="ExcludedLightBehaviours.None"/>.</param>
1920
/// <returns>The configurator instance for method chaining.</returns>
20-
public static ILightTransitionCycleConfigurator ForLight(this ILightTransitionCycleConfigurator configurator,
21-
ILightEntityCore lightEntity, Action<ILightTransitionCycleConfigurator> configure,
21+
public static ILightTransitionCycleConfigurator<NetDaemonLight> ForLight(this ILightTransitionCycleConfigurator<NetDaemonLight> configurator,
22+
ILightEntityCore lightEntity, Action<ILightTransitionCycleConfigurator<NetDaemonLight>> configure,
2223
ExcludedLightBehaviours excludedLightBehaviour = ExcludedLightBehaviours.None)
2324
{
2425
return configurator.ForLight(lightEntity.AsLight(), configure, excludedLightBehaviour);
@@ -32,8 +33,8 @@ public static ILightTransitionCycleConfigurator ForLight(this ILightTransitionCy
3233
/// <param name="configure">An action to configure the cycle for these lights.</param>
3334
/// <param name="excludedLightBehaviour">Specifies the behavior for lights not included in this scoped configuration. Defaults to <see cref="ExcludedLightBehaviours.None"/>.</param>
3435
/// <returns>The configurator instance for method chaining.</returns>
35-
public static ILightTransitionCycleConfigurator ForLights(this ILightTransitionCycleConfigurator configurator,
36-
IEnumerable<ILightEntityCore> lightEntities, Action<ILightTransitionCycleConfigurator> configure,
36+
public static ILightTransitionCycleConfigurator<NetDaemonLight> ForLights(this ILightTransitionCycleConfigurator<NetDaemonLight> configurator,
37+
IEnumerable<ILightEntityCore> lightEntities, Action<ILightTransitionCycleConfigurator<NetDaemonLight>> configure,
3738
ExcludedLightBehaviours excludedLightBehaviour = ExcludedLightBehaviours.None)
3839
{
3940
return configurator.ForLights(lightEntities.Select(l => l.AsLight()), configure, excludedLightBehaviour);

src/CodeCasa.AutomationPipelines.Lights.NetDaemon/Extensions/LightTransitionPipelineConfiguratorExtensions.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using CodeCasa.AutomationPipelines.Lights.Pipeline;
2+
using CodeCasa.Lights.NetDaemon;
23
using CodeCasa.Lights.NetDaemon.Extensions;
34
using NetDaemon.HassModel.Entities;
45

@@ -16,8 +17,8 @@ public static class LightTransitionPipelineConfiguratorExtensions
1617
/// <param name="lightEntity">The NetDaemon light entity to configure.</param>
1718
/// <param name="compositeNodeBuilder">An action to configure the pipeline for this specific light.</param>
1819
/// <returns>The configurator instance for method chaining.</returns>
19-
public static ILightTransitionPipelineConfigurator ForLight(this ILightTransitionPipelineConfigurator configurator,
20-
ILightEntityCore lightEntity, Action<ILightTransitionPipelineConfigurator> compositeNodeBuilder)
20+
public static ILightTransitionPipelineConfigurator<NetDaemonLight> ForLight(this ILightTransitionPipelineConfigurator<NetDaemonLight> configurator,
21+
ILightEntityCore lightEntity, Action<ILightTransitionPipelineConfigurator<NetDaemonLight>> compositeNodeBuilder)
2122
{
2223
return configurator.ForLight(lightEntity.AsLight(), compositeNodeBuilder);
2324
}
@@ -29,8 +30,8 @@ public static ILightTransitionPipelineConfigurator ForLight(this ILightTransitio
2930
/// <param name="lightEntities">The NetDaemon light entities to configure.</param>
3031
/// <param name="compositeNodeBuilder">An action to configure the pipeline for these lights.</param>
3132
/// <returns>The configurator instance for method chaining.</returns>
32-
public static ILightTransitionPipelineConfigurator ForLights(this ILightTransitionPipelineConfigurator configurator,
33-
IEnumerable<ILightEntityCore> lightEntities, Action<ILightTransitionPipelineConfigurator> compositeNodeBuilder)
33+
public static ILightTransitionPipelineConfigurator<NetDaemonLight> ForLights(this ILightTransitionPipelineConfigurator<NetDaemonLight> configurator,
34+
IEnumerable<ILightEntityCore> lightEntities, Action<ILightTransitionPipelineConfigurator<NetDaemonLight>> compositeNodeBuilder)
3435
{
3536
return configurator.ForLights(lightEntities.Select(l => l.AsLight()), compositeNodeBuilder);
3637
}

src/CodeCasa.AutomationPipelines.Lights.NetDaemon/Extensions/LightTransitionReactiveNodeConfiguratorExtensions.cs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using CodeCasa.AutomationPipelines.Lights.ReactiveNode;
2+
using CodeCasa.Lights.NetDaemon;
23
using CodeCasa.Lights.NetDaemon.Extensions;
34
using NetDaemon.HassModel.Entities;
45

@@ -16,9 +17,9 @@ public static class LightTransitionReactiveNodeConfiguratorExtensions
1617
/// <param name="lightEntity">The NetDaemon light entity to configure.</param>
1718
/// <param name="configure">An action to configure the reactive node for this specific light.</param>
1819
/// <returns>The configurator instance for method chaining.</returns>
19-
public static ILightTransitionReactiveNodeConfigurator ForLight(
20-
this ILightTransitionReactiveNodeConfigurator configurator,
21-
ILightEntityCore lightEntity, Action<ILightTransitionReactiveNodeConfigurator> configure)
20+
public static ILightTransitionReactiveNodeConfigurator<NetDaemonLight> ForLight(
21+
this ILightTransitionReactiveNodeConfigurator<NetDaemonLight> configurator,
22+
ILightEntityCore lightEntity, Action<ILightTransitionReactiveNodeConfigurator<NetDaemonLight>> configure)
2223
{
2324
return configurator.ForLight(lightEntity.AsLight(), configure);
2425
}
@@ -30,9 +31,9 @@ public static ILightTransitionReactiveNodeConfigurator ForLight(
3031
/// <param name="lightEntities">The NetDaemon light entities to configure.</param>
3132
/// <param name="configure">An action to configure the reactive node for these lights.</param>
3233
/// <returns>The configurator instance for method chaining.</returns>
33-
public static ILightTransitionReactiveNodeConfigurator ForLights(
34-
this ILightTransitionReactiveNodeConfigurator configurator,
35-
IEnumerable<ILightEntityCore> lightEntities, Action<ILightTransitionReactiveNodeConfigurator> configure)
34+
public static ILightTransitionReactiveNodeConfigurator<NetDaemonLight> ForLights(
35+
this ILightTransitionReactiveNodeConfigurator<NetDaemonLight> configurator,
36+
IEnumerable<ILightEntityCore> lightEntities, Action<ILightTransitionReactiveNodeConfigurator<NetDaemonLight>> configure)
3637
{
3738
return configurator.ForLights(lightEntities.Select(l => l.AsLight()), configure);
3839
}

src/CodeCasa.AutomationPipelines.Lights.NetDaemon/Extensions/LightTransitionToggleConfiguratorExtensions.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using CodeCasa.AutomationPipelines.Lights.Toggle;
2+
using CodeCasa.Lights.NetDaemon;
23
using CodeCasa.Lights.NetDaemon.Extensions;
34
using NetDaemon.HassModel.Entities;
45

@@ -17,8 +18,8 @@ public static class LightTransitionToggleConfiguratorExtensions
1718
/// <param name="configure">An action to configure the toggle for this specific light.</param>
1819
/// <param name="excludedLightBehaviour">Specifies the behavior for lights not included in this scoped configuration. Defaults to <see cref="ExcludedLightBehaviours.None"/>.</param>
1920
/// <returns>The configurator instance for method chaining.</returns>
20-
public static ILightTransitionToggleConfigurator ForLight(this ILightTransitionToggleConfigurator configurator,
21-
ILightEntityCore lightEntity, Action<ILightTransitionToggleConfigurator> configure,
21+
public static ILightTransitionToggleConfigurator<NetDaemonLight> ForLight(this ILightTransitionToggleConfigurator<NetDaemonLight> configurator,
22+
ILightEntityCore lightEntity, Action<ILightTransitionToggleConfigurator<NetDaemonLight>> configure,
2223
ExcludedLightBehaviours excludedLightBehaviour = ExcludedLightBehaviours.None)
2324
{
2425
return configurator.ForLight(lightEntity.AsLight(), configure, excludedLightBehaviour);
@@ -32,8 +33,8 @@ public static ILightTransitionToggleConfigurator ForLight(this ILightTransitionT
3233
/// <param name="configure">An action to configure the toggle for these lights.</param>
3334
/// <param name="excludedLightBehaviour">Specifies the behavior for lights not included in this scoped configuration. Defaults to <see cref="ExcludedLightBehaviours.None"/>.</param>
3435
/// <returns>The configurator instance for method chaining.</returns>
35-
public static ILightTransitionToggleConfigurator ForLights(this ILightTransitionToggleConfigurator configurator,
36-
IEnumerable<ILightEntityCore> lightEntities, Action<ILightTransitionToggleConfigurator> configure,
36+
public static ILightTransitionToggleConfigurator<NetDaemonLight> ForLights(this ILightTransitionToggleConfigurator<NetDaemonLight> configurator,
37+
IEnumerable<ILightEntityCore> lightEntities, Action<ILightTransitionToggleConfigurator<NetDaemonLight>> configure,
3738
ExcludedLightBehaviours excludedLightBehaviour = ExcludedLightBehaviours.None)
3839
{
3940
return configurator.ForLights(lightEntities.Select(l => l.AsLight()), configure, excludedLightBehaviour);

src/CodeCasa.AutomationPipelines.Lights/CodeCasa.AutomationPipelines.Lights.csproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,10 @@
3838
</None>
3939
</ItemGroup>
4040

41+
<ItemGroup>
42+
<PackageReference Include="DependencyInjection.Composite" Version="1.0.1" />
43+
</ItemGroup>
44+
4145
<ItemGroup>
4246
<ProjectReference Include="..\CodeCasa.Abstractions\CodeCasa.Abstractions.csproj" />
4347
<ProjectReference Include="..\CodeCasa.AutomationPipelines\CodeCasa.AutomationPipelines.csproj" />

src/CodeCasa.AutomationPipelines.Lights/CompositeHelper.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,13 +46,13 @@ public static void ValidateLightSupported(IEnumerable<string> lights, string sup
4646
}
4747
}
4848

49-
public static string[] ResolveGroupsAndValidateLightsSupported(IEnumerable<ILight> lights, IEnumerable<string> supportedLightIds)
49+
public static string[] ResolveGroupsAndValidateLightsSupported<TLight>(IEnumerable<TLight> lights, IEnumerable<string> supportedLightIds) where TLight : ILight
5050
{
5151
return ValidateLightsSupported(lights.SelectMany(le => le.Flatten()).Select(l => l.Id).Distinct(), supportedLightIds);
5252
}
5353

5454

55-
public static void ResolveGroupsAndValidateLightSupported(IEnumerable<ILight> lights, string supportedLightId)
55+
public static void ResolveGroupsAndValidateLightSupported<TLight>(IEnumerable<TLight> lights, string supportedLightId) where TLight : ILight
5656
{
5757
ValidateLightSupported(lights.SelectMany(le => le.Flatten()).Select(l => l.Id).Distinct(), supportedLightId);
5858
}

src/CodeCasa.AutomationPipelines.Lights/Context/ILightPipelineContext.cs

Lines changed: 0 additions & 19 deletions
This file was deleted.

src/CodeCasa.AutomationPipelines.Lights/Context/LightPipelineContext.cs

Lines changed: 0 additions & 24 deletions
This file was deleted.

src/CodeCasa.AutomationPipelines.Lights/Context/LightPipelineContextProvider.cs

Lines changed: 0 additions & 22 deletions
This file was deleted.

0 commit comments

Comments
 (0)