Compare commits
7 Commits
20221227
...
d29d658d72
Author | SHA1 | Date | |
---|---|---|---|
d29d658d72 | |||
d7b94b978c | |||
2a3225c169 | |||
70fe89228d | |||
1cd285635f | |||
baf22b802d | |||
41fe193d1e |
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
builds
|
10
build.sh
Executable file
10
build.sh
Executable file
@ -0,0 +1,10 @@
|
||||
#!/bin/sh
|
||||
|
||||
mkdir -p builds
|
||||
|
||||
rm builds/*
|
||||
|
||||
go tool dist list | grep -v android | grep -v ios | grep -v wasip1 | awk -F '/' '{printf "echo Compiling %s/%s; env CGO_ENABLED=1 GOOS=%s GOARCH=%s go build -o builds/timepercentage.%s-%s\n",$1,$2,$1,$2,$1,$2 }' | sh
|
||||
|
||||
cd builds
|
||||
for i in `ls *windows*`; do mv -v $i $i.exe; done
|
69
tp.go
69
tp.go
@ -1,7 +1,9 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
"log"
|
||||
"time"
|
||||
)
|
||||
|
||||
@ -79,15 +81,42 @@ func renderDay() string {
|
||||
return render
|
||||
}
|
||||
|
||||
func renderCustom(t1 time.Time, t2 time.Time) string {
|
||||
|
||||
var ct time.Time
|
||||
var offset int
|
||||
ct, offset = getCurrentTime()
|
||||
|
||||
seconds := t2.Sub(t1).Seconds()
|
||||
tdiff := ct.Sub(t1).Seconds()
|
||||
|
||||
percentage := calcPercentageFloat64(seconds, tdiff+float64(offset))
|
||||
|
||||
var render string
|
||||
render = renderPercentage(percentage)
|
||||
render = render + fmt.Sprintf(" %.7f%%", percentage)
|
||||
|
||||
return render
|
||||
|
||||
}
|
||||
|
||||
func getCurrentTime() (time.Time, int) {
|
||||
// Declarations
|
||||
var offset int
|
||||
var loc *time.Location
|
||||
var err error
|
||||
|
||||
// Current Time
|
||||
ct := time.Now()
|
||||
|
||||
// Get the offset from whatever the system timezone is
|
||||
_, offset := ct.Local().Zone()
|
||||
_, offset = ct.Local().Zone()
|
||||
|
||||
// Make sure that the time is in UTC, so the offset makes sense
|
||||
loc, _ := time.LoadLocation("UTC")
|
||||
loc, err = time.LoadLocation("UTC")
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
ct = ct.In(loc)
|
||||
|
||||
// Return things
|
||||
@ -135,6 +164,38 @@ func startYear(year, month, day int) time.Time {
|
||||
}
|
||||
|
||||
func main() {
|
||||
fmt.Println(renderDay())
|
||||
fmt.Println(renderYear())
|
||||
|
||||
var dayFlag = flag.Bool("day", true, "Display progress of the day.")
|
||||
var yearFlag = flag.Bool("year", true, "Display progress of this year.")
|
||||
|
||||
var customFlag = flag.Bool("custom", false, "Display a custom range")
|
||||
var customStart = flag.String("custom-start", "", "Start of the custom range")
|
||||
var customStop = flag.String("custom-stop", "", "Start of the custom range")
|
||||
|
||||
flag.Parse()
|
||||
|
||||
if *dayFlag {
|
||||
fmt.Println(renderDay())
|
||||
}
|
||||
|
||||
if *yearFlag {
|
||||
fmt.Println(renderYear())
|
||||
}
|
||||
|
||||
if *customFlag {
|
||||
|
||||
bt, err := time.Parse(time.RFC3339, *customStart)
|
||||
if err != nil {
|
||||
log.Fatalln("Error parsing start time: ", err)
|
||||
}
|
||||
|
||||
pa, err := time.Parse(time.RFC3339, *customStop)
|
||||
if err != nil {
|
||||
log.Fatalln("Error parsing stop time: ", err)
|
||||
}
|
||||
|
||||
fmt.Println(renderCustom(bt, pa))
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
36
tp_test.go
Normal file
36
tp_test.go
Normal file
@ -0,0 +1,36 @@
|
||||
package main
|
||||
|
||||
import "testing"
|
||||
|
||||
func TestRenderPercentage(t *testing.T) {
|
||||
var percentage float64
|
||||
|
||||
percentage = 91.8948715
|
||||
if renderPercentage(percentage) != "▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒░░░░" {
|
||||
t.Errorf("renderPercentage(%f)", percentage)
|
||||
}
|
||||
|
||||
percentage = 15.8682051
|
||||
if renderPercentage(percentage) != "▓▓▓▓▓▓▓▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░" {
|
||||
t.Errorf("renderPercentage(%f)", percentage)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func TestCalcPercentageFloat64(t *testing.T) {
|
||||
var full float64
|
||||
var part float64
|
||||
|
||||
full = 100
|
||||
part = 50
|
||||
if calcPercentageFloat64(full, part) != 50 {
|
||||
t.Errorf("calcPercentageFloat64(%f,%f) test failed", full, part)
|
||||
}
|
||||
|
||||
full = 8000
|
||||
part = 2000
|
||||
if calcPercentageFloat64(full, part) != 25 {
|
||||
t.Errorf("calcPercentageFloat64(%f,%f) test failed", full, part)
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user