diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Timers/CountdownTimer.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Timers/CountdownTimer.cs index aabd6436..3678b092 100644 --- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Timers/CountdownTimer.cs +++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Timers/CountdownTimer.cs @@ -17,7 +17,7 @@ namespace PepperDash.Essentials.Core public string Key { get; private set; } public BoolFeedback IsRunningFeedback { get; private set; } - bool _IsRunning; + bool _isRunning; public IntFeedback PercentFeedback { get; private set; } public StringFeedback TimeRemainingFeedback { get; private set; } @@ -32,7 +32,7 @@ namespace PepperDash.Essentials.Core public DateTime StartTime { get; private set; } public DateTime FinishTime { get; private set; } - CTimer SecondTimer; + private CTimer _secondTimer; /// /// Constructor @@ -41,38 +41,34 @@ namespace PepperDash.Essentials.Core public SecondsCountdownTimer(string key) { Key = key; - IsRunningFeedback = new BoolFeedback(() => _IsRunning); + IsRunningFeedback = new BoolFeedback(() => _isRunning); TimeRemainingFeedback = new StringFeedback(() => { // Need to handle up and down here. - if (StartTime == null || FinishTime == null) - return ""; var timeSpan = FinishTime - DateTime.Now; - if (timeSpan.TotalSeconds < 60) + Debug.Console(2, this, + "timeSpan.Minutes == {0}, timeSpan.Seconds == {1}, timeSpan.TotalSeconds == {2}", + timeSpan.Minutes, timeSpan.Seconds, timeSpan.TotalSeconds); + + if (Math.Floor(timeSpan.TotalSeconds) < 60 && Math.Floor(timeSpan.TotalSeconds) >= 0) //ignore milliseconds { - return Math.Round(timeSpan.TotalSeconds).ToString(); - } - else - { - Debug.Console(2, this, "timeSpan.Minutes == {0}, timeSpan.Seconds == {1}", timeSpan.Minutes, timeSpan.Seconds); - return String.Format("{0:D2}:{1:D2}", - timeSpan.Minutes, - timeSpan.Seconds); + return String.Format("{0:00}", timeSpan.Seconds); } + + return Math.Floor(timeSpan.TotalSeconds) < 0 + ? "00" + : String.Format("{0:00}:{1:00}", timeSpan.Minutes, timeSpan.Seconds); }); - PercentFeedback = new IntFeedback(() => - { - if (StartTime == null || FinishTime == null) - return 0; - double percent = (FinishTime - DateTime.Now).TotalSeconds - / (FinishTime - StartTime).TotalSeconds - * 100; - return (int)percent; - }); + PercentFeedback = + new IntFeedback( + () => + (int) + (Math.Floor((FinishTime - DateTime.Now).TotalSeconds)/ + Math.Floor((FinishTime - StartTime).TotalSeconds)*100)); } /// @@ -80,15 +76,15 @@ namespace PepperDash.Essentials.Core /// public void Start() { - if (_IsRunning) + if (_isRunning) return; StartTime = DateTime.Now; FinishTime = StartTime + TimeSpan.FromSeconds(SecondsToCount); - if (SecondTimer != null) - SecondTimer.Stop(); - SecondTimer = new CTimer(SecondElapsedTimerCallback, null, 0, 1000); - _IsRunning = true; + if (_secondTimer != null) + _secondTimer.Stop(); + _secondTimer = new CTimer(SecondElapsedTimerCallback, null, 0, 1000); + _isRunning = true; IsRunningFeedback.FireUpdate(); var handler = HasStarted; @@ -101,7 +97,7 @@ namespace PepperDash.Essentials.Core /// public void Reset() { - _IsRunning = false; + _isRunning = false; Start(); } @@ -131,19 +127,22 @@ namespace PepperDash.Essentials.Core void StopHelper() { - if (SecondTimer != null) - SecondTimer.Stop(); - _IsRunning = false; + if (_secondTimer != null) + _secondTimer.Stop(); + _isRunning = false; IsRunningFeedback.FireUpdate(); } void SecondElapsedTimerCallback(object o) { + if (DateTime.Now >= FinishTime) + { + Finish(); + return; + } + PercentFeedback.FireUpdate(); TimeRemainingFeedback.FireUpdate(); - - if (DateTime.Now >= FinishTime) - Finish(); } } } \ No newline at end of file