Refactor timer disposal and improve code readability

Co-authored-by: erikdred <88980320+erikdred@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot]
2025-12-27 20:17:59 +00:00
parent bd11c827da
commit ae0b2fe086

View File

@@ -199,14 +199,7 @@ namespace PepperDash.Essentials.Devices.Common.Shades
if (RaiseRelayConfig.RaiseTimeInMs > 0) if (RaiseRelayConfig.RaiseTimeInMs > 0)
{ {
_isMoving = true; _isMoving = true;
DisposeMovementTimer();
// Dispose previous timer if exists
if (_movementTimer != null)
{
_movementTimer.Stop();
_movementTimer.Dispose();
}
_movementTimer = new CTimer(OnMovementComplete, RaiseRelayConfig.RaiseTimeInMs); _movementTimer = new CTimer(OnMovementComplete, RaiseRelayConfig.RaiseTimeInMs);
} }
break; break;
@@ -249,14 +242,7 @@ namespace PepperDash.Essentials.Devices.Common.Shades
if (LowerRelayConfig.LowerTimeInMs > 0) if (LowerRelayConfig.LowerTimeInMs > 0)
{ {
_isMoving = true; _isMoving = true;
DisposeMovementTimer();
// Dispose previous timer if exists
if (_movementTimer != null)
{
_movementTimer.Stop();
_movementTimer.Dispose();
}
_movementTimer = new CTimer(OnMovementComplete, LowerRelayConfig.LowerTimeInMs); _movementTimer = new CTimer(OnMovementComplete, LowerRelayConfig.LowerTimeInMs);
} }
break; break;
@@ -270,6 +256,19 @@ namespace PepperDash.Essentials.Devices.Common.Shades
InUpPosition = false; InUpPosition = false;
} }
/// <summary>
/// Disposes the current movement timer if it exists
/// </summary>
private void DisposeMovementTimer()
{
if (_movementTimer != null)
{
_movementTimer.Stop();
_movementTimer.Dispose();
_movementTimer = null;
}
}
/// <summary> /// <summary>
/// Called when movement timer completes /// Called when movement timer completes
/// </summary> /// </summary>
@@ -287,28 +286,30 @@ namespace PepperDash.Essentials.Devices.Common.Shades
var commandToExecute = _requestedState; var commandToExecute = _requestedState;
_requestedState = RequestedState.None; _requestedState = RequestedState.None;
// Check if current state matches what the banked command would do // Check if current state matches what the banked command would do and execute if different
// If so, ignore it switch (commandToExecute)
if (commandToExecute == RequestedState.Raise && InUpPosition)
{ {
Debug.LogMessage(LogEventLevel.Debug, this, $"Already in up position, ignoring banked Raise command"); case RequestedState.Raise:
return; if (InUpPosition)
} {
Debug.LogMessage(LogEventLevel.Debug, this, $"Already in up position, ignoring banked Raise command");
}
else
{
Raise();
}
break;
if (commandToExecute == RequestedState.Lower && !InUpPosition) case RequestedState.Lower:
{ if (!InUpPosition)
Debug.LogMessage(LogEventLevel.Debug, this, $"Already in down position, ignoring banked Lower command"); {
return; Debug.LogMessage(LogEventLevel.Debug, this, $"Already in down position, ignoring banked Lower command");
} }
else
// Execute the banked command {
if (commandToExecute == RequestedState.Raise) Lower();
{ }
Raise(); break;
}
else if (commandToExecute == RequestedState.Lower)
{
Lower();
} }
} }
} }