go time is stupid

master
Bel LaPointe 2018-04-19 08:01:12 -06:00
parent e5d1fee1d5
commit 8bff38479f
1 changed files with 31 additions and 15 deletions

36
main.go
View File

@ -12,7 +12,10 @@ import (
var notified = false
var originalStart = time.Now()
func main() {
var duration string
var offset string
var interval string
@ -63,15 +66,16 @@ func main() {
go func() {
last := time.Now()
printTime(&cur, base, &delim, invert)
printTime(&cur, base, &delim, invert, repeat)
for {
select {
case <-monitor.C:
if invert {
cur += time.Now().Sub(last)
cur += time.Duration(time.Now().UnixNano() - last.UnixNano())
} else {
cur -= time.Now().Sub(last)
cur -= time.Duration(time.Now().UnixNano() - last.UnixNano())
}
last = time.Now()
case state := <-pause:
if !state {
monitor = time.NewTicker(tickerInterval)
@ -83,8 +87,7 @@ func main() {
confirm <- true
return
}
last = time.Now()
printTime(&cur, base, &delim, invert)
printTime(&cur, base, &delim, invert, repeat)
}
}()
@ -106,13 +109,23 @@ func main() {
paused = !paused
pause <- paused
case 'r':
skip = time.Duration(0)
originalStart = time.Now()
cur = base
printTime(&cur, base, &delim, invert)
notified = false
printTime(&cur, base, &delim, invert, repeat)
case 'z':
fmt.Printf("\nnow:\t%v\nstart:\t%v\ndiff:\t%v\n", time.Now().UnixNano()/int64(time.Second), originalStart.UnixNano()/int64(time.Second), (time.Now().UnixNano()-originalStart.UnixNano())/int64(time.Second))
if invert {
cur = skip + time.Duration(time.Now().UnixNano()-originalStart.UnixNano())
} else {
cur = base - skip - time.Duration(time.Now().UnixNano()-originalStart.UnixNano())
}
}
}
}
func printTime(pRemains *time.Duration, target time.Duration, delim *rune, reverse bool) {
func printTime(pRemains *time.Duration, target time.Duration, delim *rune, reverse bool, repeat bool) {
remains := *pRemains
sec := remains.Seconds()
min := int(sec / 60.0)
@ -136,7 +149,7 @@ func printTime(pRemains *time.Duration, target time.Duration, delim *rune, rever
rSec = 0
rHrs = 0
tdelim = ':'
go alertTime(pRemains, target, reverse)
go alertTime(pRemains, target, reverse, repeat)
}
at := fmt.Sprintf("%2d%c%02d%c%02d", hrs, byte(*delim), min, byte(*delim), seconds)
rem := fmt.Sprintf("%2d%c%02d%c%02d", rHrs, tdelim, rMin, tdelim, rSec)
@ -145,18 +158,20 @@ func printTime(pRemains *time.Duration, target time.Duration, delim *rune, rever
rem := fmt.Sprintf("%2d%c%02d%c%02d", hrs, byte(*delim), min, byte(*delim), seconds)
fmt.Printf("\rRemaining: %s ", rem)
if remains < 0 {
go alertTime(pRemains, target, reverse)
go alertTime(pRemains, target, reverse, repeat)
}
}
}
func alertTime(pRemains *time.Duration, target time.Duration, reverse bool) {
func alertTime(pRemains *time.Duration, target time.Duration, reverse, repeat bool) {
if !notified {
notified = true
_, err := mack.Alert(fmt.Sprintf("Timer for %s done", target.String()))
if err != nil {
panic(err)
}
if repeat {
originalStart = time.Now()
if reverse {
*pRemains -= target
} else {
@ -164,4 +179,5 @@ func alertTime(pRemains *time.Duration, target time.Duration, reverse bool) {
}
notified = false
}
}
}