diff --git a/cmd/uhr/main.go b/cmd/uhr/main.go index fbcfef1..04b5d09 100644 --- a/cmd/uhr/main.go +++ b/cmd/uhr/main.go @@ -8,7 +8,11 @@ import ( ) func main() { - p := tea.NewProgram(ui.New()) + m, err := ui.New("Local") + if err != nil { + log.Fatal(err) + } + p := tea.NewProgram(m) if err := p.Start(); err != nil { log.Fatal(err) } diff --git a/cmd/wisuhr/main.go b/cmd/wisuhr/main.go index b3d5f76..f205315 100644 --- a/cmd/wisuhr/main.go +++ b/cmd/wisuhr/main.go @@ -6,6 +6,7 @@ import ( "log" "os" "os/signal" + "strings" "syscall" "time" @@ -33,7 +34,11 @@ func main() { wish.WithHostKeyPath(".ssh/term_info_ed25519"), wish.WithMiddleware( bubbletea.Middleware(func(s ssh.Session) (tea.Model, []tea.ProgramOption) { - return ui.New(), []tea.ProgramOption{tea.WithAltScreen()} + m, err := ui.New(tz(s.Environ())) + if err != nil { + wish.Fatal(s, err) + } + return m, []tea.ProgramOption{tea.WithAltScreen()} }), logging.Middleware(), ), @@ -59,3 +64,13 @@ func main() { log.Fatalln(err) } } + +func tz(env []string) string { + for _, e := range env { + k, v, ok := strings.Cut(e, "=") + if ok && k == "TZ" { + return v + } + } + return "" +} diff --git a/pkg/ui/model.go b/pkg/ui/model.go index bd58da1..55813e6 100644 --- a/pkg/ui/model.go +++ b/pkg/ui/model.go @@ -8,14 +8,20 @@ import ( "github.com/charmbracelet/lipgloss" ) -func New() tea.Model { - return model{ - t: time.Now(), +func New(tz string) (tea.Model, error) { + loc, err := time.LoadLocation(tz) + if err != nil { + return nil, err } + return model{ + t: time.Now(), + tz: loc, + }, err } type model struct { - t time.Time + t time.Time + tz *time.Location } func (m model) Init() tea.Cmd { @@ -49,13 +55,14 @@ var ( ) func (m model) View() string { + t := m.t.In(m.tz) s := header.Render("Hallo!") + "\n\n" s += "Heute ist " + italic.Render(uhr.Weekday(m.t)) + ".\n" - s += "Es ist jetzt " + italic.Render(m.t.Format("15.04")) + ", aber du kannst auch sagen:\n" - for _, l := range uhr.Uhr(m.t) { + s += "Es ist jetzt " + italic.Render(t.Format("15.04")) + ", aber du kannst auch sagen:\n" + for _, l := range uhr.Uhr(t) { s += list.Render("- ") + italic.Render(l) + "\n" } - s += "Es ist " + italic.Render(uhr.PartOfDay(m.t)) + ".\n" + s += "Es ist " + italic.Render(uhr.PartOfDay(t)) + ".\n" s += footer.Render("\ndrücke 'q' zum Beenden") return s