diff options
author | delthas <delthas@dille.cc> | 2022-11-15 11:35:40 +0100 |
---|---|---|
committer | delthas <delthas@dille.cc> | 2022-11-15 11:35:40 +0100 |
commit | 1f923f8972d8c9207238ec57850dea10bd2e9d42 (patch) | |
tree | ac9e564ec5a0740cac3e600390c2f38ec46389e6 /ui | |
parent | Add a 10s timeout to connect + TLS handshake (diff) |
Print date as dd/mm or mm/dd depending on the user locale
Overkill, but this was a nice weekend project :-)
Fixes: https://todo.sr.ht/~taiite/senpai/107
Diffstat (limited to 'ui')
-rw-r--r-- | ui/draw_utils.go | 65 |
1 files changed, 57 insertions, 8 deletions
diff --git a/ui/draw_utils.go b/ui/draw_utils.go index 3d04f11..62f2d79 100644 --- a/ui/draw_utils.go +++ b/ui/draw_utils.go @@ -2,8 +2,12 @@ package ui import ( "fmt" + "strings" + "sync" "time" + "github.com/delthas/go-localeinfo" + "github.com/gdamore/tcell/v2" ) @@ -42,17 +46,62 @@ func printNumber(screen tcell.Screen, x *int, y int, st tcell.Style, n int) { printString(screen, x, y, s) } +var dateConfig sync.Once +var dateMonthFirst bool + +func loadDateInfo() { + // Very overkill, but I like it :) + // Try to extract from the user locale whether they'd rather have the date + // printed as dd/mm or mm/dd. + // If we're not sure, print dd/mm. + l, err := localeinfo.NewLocale("") + if err != nil { + return + } + format := l.DateFormat() + dayIndex := -1 + for _, s := range []string{"%d", "%e"} { + dayIndex = strings.Index(format, s) + if dayIndex >= 0 { + break + } + } + if dayIndex == -1 { + return + } + monthIndex := -1 + for _, s := range []string{"%m", "%b", "%B"} { + monthIndex = strings.Index(format, s) + if monthIndex >= 0 { + break + } + } + if monthIndex == -1 { + return + } + if monthIndex < dayIndex { + dateMonthFirst = true + } +} + func printDate(screen tcell.Screen, x int, y int, st tcell.Style, t time.Time) { + dateConfig.Do(loadDateInfo) _, m, d := t.Date() - d0 := rune(d/10) + '0' - d1 := rune(d%10) + '0' - m0 := rune(m/10) + '0' - m1 := rune(m%10) + '0' - screen.SetContent(x+0, y, d0, nil, st) - screen.SetContent(x+1, y, d1, nil, st) + var left, right int + if dateMonthFirst { + left, right = int(m), d + } else { + left, right = d, int(m) + } + l0 := rune(left/10) + '0' + l1 := rune(left%10) + '0' + r0 := rune(right/10) + '0' + r1 := rune(right%10) + '0' + screen.SetContent(x+0, y, l0, nil, st) + screen.SetContent(x+1, y, l1, nil, st) screen.SetContent(x+2, y, '/', nil, st) - screen.SetContent(x+3, y, m0, nil, st) - screen.SetContent(x+4, y, m1, nil, st) + screen.SetContent(x+3, y, r0, nil, st) + screen.SetContent(x+4, y, r1, nil, st) } func printTime(screen tcell.Screen, x int, y int, st tcell.Style, t time.Time) { |