mirror of https://github.com/chubin/wttr.in
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
131 lines
4.6 KiB
131 lines
4.6 KiB
package v1
|
|
|
|
import (
|
|
"math"
|
|
"time"
|
|
|
|
"github.com/klauspost/lctime"
|
|
)
|
|
|
|
func slotTimes() []int {
|
|
return []int{9 * 60, 12 * 60, 18 * 60, 22 * 60}
|
|
}
|
|
|
|
//nolint:funlen,gocognit,cyclop
|
|
func (g *global) printDay(w weather) ([]string, error) {
|
|
var (
|
|
ret = []string{}
|
|
dateName string
|
|
names string
|
|
)
|
|
|
|
hourly := w.Hourly
|
|
for i := range ret {
|
|
ret[i] = "│"
|
|
}
|
|
|
|
// find hourly data which fits the desired times of day best
|
|
var slots [slotcount]cond
|
|
for _, h := range hourly {
|
|
c := int(math.Mod(float64(h.Time), 100)) + 60*(h.Time/100)
|
|
for i, s := range slots {
|
|
if math.Abs(float64(c-slotTimes()[i])) < math.Abs(float64(s.Time-slotTimes()[i])) {
|
|
h.Time = c
|
|
slots[i] = h
|
|
}
|
|
}
|
|
}
|
|
|
|
if g.config.RightToLeft {
|
|
slots[0], slots[3] = slots[3], slots[0]
|
|
slots[1], slots[2] = slots[2], slots[1]
|
|
}
|
|
|
|
for i, s := range slots {
|
|
if g.config.Narrow {
|
|
if i == 0 || i == 2 {
|
|
continue
|
|
}
|
|
}
|
|
ret = g.formatCond(ret, s, false)
|
|
for i := range ret {
|
|
ret[i] += "│"
|
|
}
|
|
}
|
|
|
|
d, _ := time.Parse("2006-01-02", w.Date)
|
|
// dateFmt := "┤ " + d.Format("Mon 02. Jan") + " ├"
|
|
|
|
if val, ok := locale()[g.config.Lang]; ok {
|
|
err := lctime.SetLocale(val)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
} else {
|
|
err := lctime.SetLocale("en_US")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
|
|
if g.config.RightToLeft {
|
|
dow := lctime.Strftime("%a", d)
|
|
day := lctime.Strftime("%d", d)
|
|
month := lctime.Strftime("%b", d)
|
|
dateName = reverse(month) + " " + day + " " + reverse(dow)
|
|
} else {
|
|
dateName = lctime.Strftime("%a %d %b", d)
|
|
if g.config.Lang == "ko" {
|
|
dateName = lctime.Strftime("%b %d일 %a", d)
|
|
}
|
|
if g.config.Lang == "zh" || g.config.Lang == "zh-tw" || g.config.Lang == "zh-cn" {
|
|
dateName = lctime.Strftime("%b%d日%A", d)
|
|
}
|
|
}
|
|
|
|
dateFmt := "┤" + justifyCenter(dateName, 12) + "├"
|
|
|
|
trans := daytimeTranslation()["en"]
|
|
if t, ok := daytimeTranslation()[g.config.Lang]; ok {
|
|
trans = t
|
|
}
|
|
if g.config.Narrow {
|
|
names := "│ " + justifyCenter(trans[1], 16) +
|
|
"└──────┬──────┘" + justifyCenter(trans[3], 16) + " │"
|
|
|
|
ret = append([]string{
|
|
" ┌─────────────┐ ",
|
|
"┌───────────────────────" + dateFmt + "───────────────────────┐",
|
|
names,
|
|
"├──────────────────────────────┼──────────────────────────────┤",
|
|
},
|
|
ret...)
|
|
|
|
return append(ret,
|
|
"└──────────────────────────────┴──────────────────────────────┘"),
|
|
nil
|
|
}
|
|
|
|
if g.config.RightToLeft {
|
|
names = "│" + justifyCenter(trans[3], 29) + "│ " + justifyCenter(trans[2], 16) +
|
|
"└──────┬──────┘" + justifyCenter(trans[1], 16) + " │" + justifyCenter(trans[0], 29) + "│"
|
|
} else {
|
|
names = "│" + justifyCenter(trans[0], 29) + "│ " + justifyCenter(trans[1], 16) +
|
|
"└──────┬──────┘" + justifyCenter(trans[2], 16) + " │" + justifyCenter(trans[3], 29) + "│"
|
|
}
|
|
|
|
//nolint:lll
|
|
ret = append([]string{
|
|
" ┌─────────────┐ ",
|
|
"┌──────────────────────────────┬───────────────────────" + dateFmt + "───────────────────────┬──────────────────────────────┐",
|
|
names,
|
|
"├──────────────────────────────┼──────────────────────────────┼──────────────────────────────┼──────────────────────────────┤",
|
|
},
|
|
ret...)
|
|
|
|
//nolint:lll
|
|
return append(ret,
|
|
"└──────────────────────────────┴──────────────────────────────┴──────────────────────────────┴──────────────────────────────┘"),
|
|
nil
|
|
}
|