diff --git a/basicstopwatch.go b/basicstopwatch.go old mode 100644 new mode 100755 diff --git a/basictimer.go b/basictimer.go old mode 100644 new mode 100755 diff --git a/config.go b/config.go old mode 100644 new mode 100755 diff --git a/keyboard.go b/keyboard.go old mode 100644 new mode 100755 diff --git a/keyboard_test.go b/keyboard_test.go old mode 100644 new mode 100755 diff --git a/main.go b/main.go old mode 100644 new mode 100755 diff --git a/tickprinter.go b/tickprinter.go old mode 100644 new mode 100755 diff --git a/tickprinter_test.go b/tickprinter_test.go old mode 100644 new mode 100755 diff --git a/timer.go b/timer.go old mode 100644 new mode 100755 index 69bb71d..47a90fa --- a/timer.go +++ b/timer.go @@ -1,17 +1,21 @@ package main import ( + "fmt" "time" + + "github.com/everdev/mack" ) type Typed func(*Timer) string type Timer struct { - config Config - From time.Time - Typed Typed - paused bool - offset time.Duration + config Config + From time.Time + Typed Typed + paused bool + offset time.Duration + displayed bool } func NewTimer(config Config) (*Timer, error) { @@ -61,7 +65,17 @@ func (t *Timer) setTyped(config Config) error { } func (t *Timer) Remaining() time.Duration { - return time.Until(t.Deadline()) + time.Second + remaining := time.Until(t.Deadline()) + time.Second + if remaining < 0 && !t.displayed { + t.displayed = true + go func() { + _, err := mack.Alert(fmt.Sprintf("Timer for %s done", t.config.Msg)) + if err == nil { + t.Ack() + } + }() + } + return remaining } func (t *Timer) Deadline() time.Time { @@ -76,9 +90,11 @@ func (t *Timer) Ack() { for t.Done() { t.From = t.From.Add(t.config.Duration) } + t.displayed = false } func (t *Timer) Reset() { + t.Ack() t.From = time.Now() } diff --git a/with.go b/with.go old mode 100644 new mode 100755