summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordelthas <delthas@dille.cc>2022-11-15 11:35:40 +0100
committerdelthas <delthas@dille.cc>2022-11-15 11:35:40 +0100
commit1f923f8972d8c9207238ec57850dea10bd2e9d42 (patch)
treeac9e564ec5a0740cac3e600390c2f38ec46389e6
parentAdd 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
-rw-r--r--go.mod2
-rw-r--r--go.sum2
-rw-r--r--ui/draw_utils.go65
3 files changed, 60 insertions, 9 deletions
diff --git a/go.mod b/go.mod
index 6bc57ac..2c304cd 100644
--- a/go.mod
+++ b/go.mod
@@ -4,7 +4,7 @@ go 1.16
require (
git.sr.ht/~emersion/go-scfg v0.0.0-20201019143924-142a8aa629fc
- github.com/gdamore/encoding v1.0.0
+ github.com/delthas/go-localeinfo v0.0.0-20221115102303-5a7785a1acc1
github.com/gdamore/tcell/v2 v2.5.4-0.20221017224006-ede1dd5ee680
github.com/mattn/go-runewidth v0.0.14
golang.org/x/net v0.0.0-20220722155237-a158d28d115b
diff --git a/go.sum b/go.sum
index cb2a317..afa9274 100644
--- a/go.sum
+++ b/go.sum
@@ -2,6 +2,8 @@ git.sr.ht/~emersion/go-scfg v0.0.0-20201019143924-142a8aa629fc h1:51BD67xFX+bozd
git.sr.ht/~emersion/go-scfg v0.0.0-20201019143924-142a8aa629fc/go.mod h1:t+Ww6SR24yYnXzEWiNlOY0AFo5E9B73X++10lrSpp4U=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/delthas/go-localeinfo v0.0.0-20221115102303-5a7785a1acc1 h1:sCu9bac1vv1LMBOsnUymZsi4iTO5PBQqn2Z3KJiGXXg=
+github.com/delthas/go-localeinfo v0.0.0-20221115102303-5a7785a1acc1/go.mod h1:sG54BxlyQgIskYURLrg7mvhoGBe0Qq12DNtYRALwNa4=
github.com/gdamore/encoding v1.0.0 h1:+7OoQ1Bc6eTm5niUzBa0Ctsh6JbMW6Ra+YNuAtDBdko=
github.com/gdamore/encoding v1.0.0/go.mod h1:alR0ol34c49FCSBLjhosxzcPHQbf2trDkoo5dl+VrEg=
github.com/gdamore/tcell/v2 v2.5.4-0.20221017224006-ede1dd5ee680 h1:bCjGvZsZNvhzJZ+gDmXpKdDPyf358nSPqepaTI1AsMQ=
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) {