diff options
Diffstat (limited to 'src/Update/UpdateTimer.elm')
-rw-r--r-- | src/Update/UpdateTimer.elm | 34 |
1 files changed, 28 insertions, 6 deletions
diff --git a/src/Update/UpdateTimer.elm b/src/Update/UpdateTimer.elm index e45a3c2..2e0d9af 100644 --- a/src/Update/UpdateTimer.elm +++ b/src/Update/UpdateTimer.elm @@ -14,6 +14,7 @@ type TimerAction = | ToggleRunning | Stop | SetTime Time + | SubstractTime Time updateTimer : TimerAction -> Timer -> Timer updateTimer action timer = @@ -21,12 +22,19 @@ updateTimer action timer = Pause -> { timer | state <- Idle } ToggleRunning -> - { timer - | state <- - if timer.currentTime > 0 && timer.state == Idle - then Running - else Idle - } + if timer.state == Ringing + then + { timer + | currentTime <- initTime timer.initialTime + , state <- Running + } + else + { timer + | state <- + if timer.currentTime > 0 && timer.state == Idle + then Running + else Idle + } Stop -> { timer | currentTime <- initTime timer.initialTime @@ -38,3 +46,17 @@ updateTimer action timer = | initialTime <- time , currentTime <- augmentedTime } + SubstractTime time -> + if timer.state == Running + then + let newTime = timer.currentTime - time + in if newTime <= 0.0 + then + { timer + | currentTime <- 0.0 + , state <- Ringing + } + else + { timer | currentTime <- newTime } + else + timer |