mirror of
https://github.com/chubin/wttr.in
synced 2025-01-12 12:08:47 +00:00
126 lines
4.7 KiB
Go
126 lines
4.7 KiB
Go
package main
|
|
|
|
import (
|
|
"math"
|
|
"time"
|
|
|
|
"github.com/klauspost/lctime"
|
|
)
|
|
|
|
var (
|
|
slotTimes = [slotcount]int{9 * 60, 12 * 60, 18 * 60, 22 * 60}
|
|
)
|
|
|
|
func printDay(w weather) (ret []string) {
|
|
hourly := w.Hourly
|
|
ret = make([]string, 5)
|
|
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 config.RightToLeft {
|
|
slots[0], slots[3] = slots[3], slots[0]
|
|
slots[1], slots[2] = slots[2], slots[1]
|
|
}
|
|
|
|
for i, s := range slots {
|
|
if config.Narrow {
|
|
if i == 0 || i == 2 {
|
|
continue
|
|
}
|
|
}
|
|
ret = formatCond(ret, s, false)
|
|
for i := range ret {
|
|
ret[i] = ret[i] + "│"
|
|
}
|
|
}
|
|
|
|
d, _ := time.Parse("2006-01-02", w.Date)
|
|
// dateFmt := "┤ " + d.Format("Mon 02. Jan") + " ├"
|
|
|
|
if val, ok := locale[config.Lang]; ok {
|
|
lctime.SetLocale(val)
|
|
} else {
|
|
lctime.SetLocale("en_US")
|
|
}
|
|
dateName := ""
|
|
if 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 config.Lang == "ko" {
|
|
dateName = lctime.Strftime("%b %d일 %a", d)
|
|
}
|
|
if config.Lang == "zh" || config.Lang == "zh-tw" || config.Lang == "zh-cn" {
|
|
dateName = lctime.Strftime("%b%d日%A", d)
|
|
}
|
|
}
|
|
// appendSide := 0
|
|
// // for utf8.RuneCountInString(dateName) <= dateWidth {
|
|
// for runewidth.StringWidth(dateName) <= dateWidth {
|
|
// if appendSide == 1 {
|
|
// dateName = dateName + " "
|
|
// appendSide = 0
|
|
// } else {
|
|
// dateName = " " + dateName
|
|
// appendSide = 1
|
|
// }
|
|
// }
|
|
|
|
dateFmt := "┤" + justifyCenter(dateName, 12) + "├"
|
|
|
|
trans := daytimeTranslation["en"]
|
|
if t, ok := daytimeTranslation[config.Lang]; ok {
|
|
trans = t
|
|
}
|
|
if config.Narrow {
|
|
|
|
names := "│ " + justifyCenter(trans[1], 16) +
|
|
"└──────┬──────┘" + justifyCenter(trans[3], 16) + " │"
|
|
|
|
ret = append([]string{
|
|
" ┌─────────────┐ ",
|
|
"┌───────────────────────" + dateFmt + "───────────────────────┐",
|
|
names,
|
|
"├──────────────────────────────┼──────────────────────────────┤"},
|
|
ret...)
|
|
|
|
return append(ret,
|
|
"└──────────────────────────────┴──────────────────────────────┘")
|
|
|
|
}
|
|
|
|
names := ""
|
|
if 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) + "│"
|
|
}
|
|
|
|
ret = append([]string{
|
|
" ┌─────────────┐ ",
|
|
"┌──────────────────────────────┬───────────────────────" + dateFmt + "───────────────────────┬──────────────────────────────┐",
|
|
names,
|
|
"├──────────────────────────────┼──────────────────────────────┼──────────────────────────────┼──────────────────────────────┤"},
|
|
ret...)
|
|
|
|
return append(ret,
|
|
"└──────────────────────────────┴──────────────────────────────┴──────────────────────────────┴──────────────────────────────┘")
|
|
}
|