go time is stupid
parent
e5d1fee1d5
commit
8bff38479f
46
main.go
46
main.go
|
|
@ -12,7 +12,10 @@ import (
|
||||||
|
|
||||||
var notified = false
|
var notified = false
|
||||||
|
|
||||||
|
var originalStart = time.Now()
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
|
||||||
var duration string
|
var duration string
|
||||||
var offset string
|
var offset string
|
||||||
var interval string
|
var interval string
|
||||||
|
|
@ -63,15 +66,16 @@ func main() {
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
last := time.Now()
|
last := time.Now()
|
||||||
printTime(&cur, base, &delim, invert)
|
printTime(&cur, base, &delim, invert, repeat)
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
case <-monitor.C:
|
case <-monitor.C:
|
||||||
if invert {
|
if invert {
|
||||||
cur += time.Now().Sub(last)
|
cur += time.Duration(time.Now().UnixNano() - last.UnixNano())
|
||||||
} else {
|
} else {
|
||||||
cur -= time.Now().Sub(last)
|
cur -= time.Duration(time.Now().UnixNano() - last.UnixNano())
|
||||||
}
|
}
|
||||||
|
last = time.Now()
|
||||||
case state := <-pause:
|
case state := <-pause:
|
||||||
if !state {
|
if !state {
|
||||||
monitor = time.NewTicker(tickerInterval)
|
monitor = time.NewTicker(tickerInterval)
|
||||||
|
|
@ -83,8 +87,7 @@ func main() {
|
||||||
confirm <- true
|
confirm <- true
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
last = time.Now()
|
printTime(&cur, base, &delim, invert, repeat)
|
||||||
printTime(&cur, base, &delim, invert)
|
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
|
@ -106,13 +109,23 @@ func main() {
|
||||||
paused = !paused
|
paused = !paused
|
||||||
pause <- paused
|
pause <- paused
|
||||||
case 'r':
|
case 'r':
|
||||||
|
skip = time.Duration(0)
|
||||||
|
originalStart = time.Now()
|
||||||
cur = base
|
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
|
remains := *pRemains
|
||||||
sec := remains.Seconds()
|
sec := remains.Seconds()
|
||||||
min := int(sec / 60.0)
|
min := int(sec / 60.0)
|
||||||
|
|
@ -136,7 +149,7 @@ func printTime(pRemains *time.Duration, target time.Duration, delim *rune, rever
|
||||||
rSec = 0
|
rSec = 0
|
||||||
rHrs = 0
|
rHrs = 0
|
||||||
tdelim = ':'
|
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)
|
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)
|
rem := fmt.Sprintf("%2d%c%02d%c%02d", rHrs, tdelim, rMin, tdelim, rSec)
|
||||||
|
|
@ -145,23 +158,26 @@ 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)
|
rem := fmt.Sprintf("%2d%c%02d%c%02d", hrs, byte(*delim), min, byte(*delim), seconds)
|
||||||
fmt.Printf("\rRemaining: %s ", rem)
|
fmt.Printf("\rRemaining: %s ", rem)
|
||||||
if remains < 0 {
|
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 {
|
if !notified {
|
||||||
notified = true
|
notified = true
|
||||||
_, err := mack.Alert(fmt.Sprintf("Timer for %s done", target.String()))
|
_, err := mack.Alert(fmt.Sprintf("Timer for %s done", target.String()))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
if reverse {
|
if repeat {
|
||||||
*pRemains -= target
|
originalStart = time.Now()
|
||||||
} else {
|
if reverse {
|
||||||
*pRemains += target
|
*pRemains -= target
|
||||||
|
} else {
|
||||||
|
*pRemains += target
|
||||||
|
}
|
||||||
|
notified = false
|
||||||
}
|
}
|
||||||
notified = false
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue