Skip to content

Commit

Permalink
Fix changes and all changes
Browse files Browse the repository at this point in the history
  • Loading branch information
helto4real committed May 10, 2020
1 parent d3884c5 commit 6a52dc1
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 7 deletions.
14 changes: 11 additions & 3 deletions src/App/NetDaemon.App/Common/Reactive/AppDaemonRxApp.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,15 @@ namespace JoySoftware.HomeAssistant.NetDaemon.Common.Reactive
{
public static class ObservableExtensionMethods
{
public static IObservable<(EntityState Old, EntityState New)> HassSameStateFor(this IObservable<(EntityState Old, EntityState New)> observable, TimeSpan span)
/// <summary>
/// Is same for timespan time
/// </summary>
/// <param name="observable"></param>
/// <param name="span"></param>
/// <returns></returns>
public static IObservable<(EntityState Old, EntityState New)> NDSameStateFor(this IObservable<(EntityState Old, EntityState New)> observable, TimeSpan span)
{
return observable.Delay(span).Where(e => DateTime.Now.Subtract(e.New.LastChanged) >= span);
return observable.Throttle(span);
}
}

Expand All @@ -29,7 +35,9 @@ public NetDaemonRxApp()
{
}

public IRxStateChange StateChanges => _reactiveState;
public IObservable<(EntityState Old, EntityState New)> StateChanges => _reactiveState.Where(e => e.New.State != e.Old.State);

public IRxStateChange StateAllChanges => _reactiveState;

public IEnumerable<EntityState> States =>
_daemon?.State ?? throw new NullReferenceException($"{nameof(_daemon)} cant be null!");
Expand Down
17 changes: 15 additions & 2 deletions src/App/NetDaemon.App/Common/Reactive/INetDaemonReactive.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,17 @@ public interface ICallService
public interface INetDaemonReactive : INetDaemonAppBase, ICallService, IRxEntity
{
/// <summary>
/// The observable statestream
/// The observable statestream state change
/// </summary>
public IRxStateChange StateChanges { get; }
/// <remarks>
/// Old state != New state
/// </remarks>
public IObservable<(EntityState Old, EntityState New)> StateChanges { get; }

/// <summary>
/// The observable statestream, all changes inkluding attributes
/// </summary>
public IRxStateChange StateAllChanges { get; }

/// <summary>
/// Enuberable of current states
Expand All @@ -38,6 +46,11 @@ public interface INetDaemonReactive : INetDaemonAppBase, ICallService, IRxEntity
EntityState? State(string entityId);
}

public interface IRxAppHelpers
{

}

public interface IRxSchedule
{
/// <summary>
Expand Down
4 changes: 2 additions & 2 deletions tests/NetDaemon.Daemon.Tests/NetDaemonApp/RxAppTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,8 @@ public async Task TestReact()
{
bool isRun = false;
using var ctx = DefaultDaemonRxApp.StateChanges
.Where(t => t.New.EntityId == "binary_sensor.pir" && t.New.State != t.Old.State)
.HassSameStateFor(TimeSpan.FromMilliseconds(50))
.Where(t => t.New.EntityId == "binary_sensor.pir")
.NDSameStateFor(TimeSpan.FromMilliseconds(50))
.Subscribe(e =>
{
isRun = true;
Expand Down

0 comments on commit 6a52dc1

Please sign in to comment.