timer/main.go

69 lines
1003 B
Go

package main
import (
"os"
"os/signal"
"syscall"
"time"
)
func main() {
config, err := NewConfig()
if err != nil {
panic(err)
}
k, err := NewKeyboard()
if err != nil {
panic(err)
}
go k.Listen()
defer k.Close()
tp := NewTickPrinter(config.Interval)
go tp.Start()
defer tp.Stop()
timer, err := NewTimer(config)
if err != nil {
panic(err)
}
tp.Message <- timer.String
sigc := make(chan os.Signal)
signal.Notify(sigc, syscall.SIGINT, syscall.SIGQUIT, syscall.SIGTERM)
go listen(k, tp, timer, func() { close(sigc) })
select {
case <-sigc:
}
}
func listen(k *Keyboard, tp *TickPrinter, timer *Timer, stop func()) {
for {
key := <-k.Events
switch key {
case 'a':
timer.Add(time.Second)
case 'A':
timer.Add(time.Minute)
case 's':
timer.Sub(time.Second)
case 'S':
timer.Sub(time.Minute)
case 'p':
tp.Flush()
timer.TogglePause()
case 'z':
tp.Flush()
case 'r':
tp.Flush()
timer.Reset()
case 'q':
stop()
return
}
}
}