69 lines
1003 B
Go
Executable File
69 lines
1003 B
Go
Executable File
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
|
|
}
|
|
}
|
|
}
|