aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2017-04-11 13:15:55 +0200
committerDimitri Sokolyuk <demon@dim13.org>2017-04-11 13:15:55 +0200
commit33b10b165d747bb71ba8446e23ce5c5df195e07e (patch)
tree2acca81ada4c0762ddc788500a7f72c680c653f8
parent9efb8820a862b3e05621ea2c4ab07242a1258322 (diff)
cleanup
-rw-r--r--main.go51
1 files changed, 26 insertions, 25 deletions
diff --git a/main.go b/main.go
index d5b33d9..31d2043 100644
--- a/main.go
+++ b/main.go
@@ -4,7 +4,6 @@ import (
"context"
"flag"
"fmt"
- "log"
"os"
"os/signal"
"time"
@@ -22,36 +21,36 @@ type Opt struct {
type stateFn func(context.Context) stateFn
func display(ctx context.Context, s string) {
- ticker := time.NewTicker(time.Second)
- defer ticker.Stop()
- defer fmt.Printf("\r%s done\x1b[K\n", s)
dl, ok := ctx.Deadline()
if !ok {
return
}
+ ticker := time.NewTicker(time.Second)
+ defer ticker.Stop()
+ defer fmt.Printf("\r%s done\x1b[K\n", s)
for range ticker.C {
- left := time.Until(dl)
- left -= left % time.Second
- if left < 0 {
- left = 0
- }
- fmt.Printf("\r%s %s left\x1b[K", s, left)
select {
case <-ctx.Done():
return
default:
+ left := time.Until(dl)
+ left -= left % time.Second
+ if left < 0 {
+ left = 0
+ }
+ fmt.Printf("\r%s %s left\x1b[K", s, left)
}
}
}
func (o *Opt) doWork(ctx context.Context) stateFn {
- ctx, cancel := context.WithTimeout(ctx, o.Work)
- defer cancel()
select {
case <-ctx.Done():
return nil
default:
- display(ctx, "work")
+ ctx, cancel := context.WithTimeout(ctx, o.Work)
+ defer cancel()
+ display(ctx, "do work")
}
if o.run++; o.run%o.Runs == 0 {
return o.longBreak
@@ -60,39 +59,35 @@ func (o *Opt) doWork(ctx context.Context) stateFn {
}
func (o *Opt) shortBreak(ctx context.Context) stateFn {
- ctx, cancel := context.WithTimeout(ctx, o.Short)
- defer cancel()
select {
case <-ctx.Done():
return nil
default:
+ ctx, cancel := context.WithTimeout(ctx, o.Short)
+ defer cancel()
display(ctx, "short break")
}
return o.doWork
}
func (o *Opt) longBreak(ctx context.Context) stateFn {
- ctx, cancel := context.WithTimeout(ctx, o.Long)
- defer cancel()
select {
case <-ctx.Done():
return nil
default:
+ ctx, cancel := context.WithTimeout(ctx, o.Long)
+ defer cancel()
display(ctx, "long break")
}
return o.doWork
}
-const timeBase = time.Minute
-
func main() {
- defer func(t time.Time) { log.Printf("total %v", time.Since(t)) }(time.Now())
-
var o Opt
- flag.DurationVar(&o.Work, "work", 25*timeBase, "work time")
- flag.DurationVar(&o.Short, "short", 5*timeBase, "short break")
- flag.DurationVar(&o.Long, "long", 15*timeBase, "long break")
- flag.DurationVar(&o.Day, "day", 600*timeBase, "work day")
+ flag.DurationVar(&o.Work, "work", 25*time.Minute, "work time")
+ flag.DurationVar(&o.Short, "short", 5*time.Minute, "short break")
+ flag.DurationVar(&o.Long, "long", 15*time.Minute, "long break")
+ flag.DurationVar(&o.Day, "day", 12*time.Hour, "work day")
flag.IntVar(&o.Runs, "runs", 4, "work runs")
flag.Parse()
@@ -105,6 +100,12 @@ func main() {
cancel()
}()
+ defer func(t time.Time) {
+ total := time.Since(t)
+ total -= total % time.Second
+ fmt.Printf("total %v\n", total)
+ }(time.Now())
+
for s := o.doWork; s != nil; s = s(ctx) {
}
}