From 5c8e985851e2857045755eba788b76450cedf01c Mon Sep 17 00:00:00 2001 From: Kai Date: Tue, 17 Feb 2026 16:45:29 +0100 Subject: [PATCH] Matrix-Zeitzone konfigurierbar machen (Default Europe/Berlin) --- .env.example | 1 + README.md | 1 + cmd/server/matrix.go | 17 ++++++++++++++++- docker-compose.yml | 1 + 4 files changed, 19 insertions(+), 1 deletion(-) diff --git a/.env.example b/.env.example index 29184a4..7465d7c 100644 --- a/.env.example +++ b/.env.example @@ -12,3 +12,4 @@ DB_DSN=farmcal:CHANGE_ME@tcp(127.0.0.1:3306)/farmcal?parseTime=true # MATRIX_ENABLE_CRYPTO=1 # MATRIX_PICKLE_KEY=CHANGE_ME_LONG_RANDOM # MATRIX_CRYPTO_STORE_PATH=/tmp/farmcal-matrix-crypto.db +# MATRIX_TIMEZONE=Europe/Berlin diff --git a/README.md b/README.md index 971bea0..10c8632 100644 --- a/README.md +++ b/README.md @@ -44,6 +44,7 @@ MATRIX_LIMIT=25 MATRIX_ENABLE_CRYPTO=1 MATRIX_PICKLE_KEY=LONG_RANDOM_SECRET MATRIX_CRYPTO_STORE_PATH=/tmp/farmcal-matrix-crypto.db +MATRIX_TIMEZONE=Europe/Berlin ``` - `MATRIX_ACCESS_TOKEN` sollte ein User-Token mit Leserechten fuer den Raum sein. diff --git a/cmd/server/matrix.go b/cmd/server/matrix.go index a0f7a13..ba76c21 100644 --- a/cmd/server/matrix.go +++ b/cmd/server/matrix.go @@ -21,6 +21,7 @@ type MatrixClient struct { AccessToken string RoomID string Limit int + TimeLocation *time.Location httpClient *http.Client crypto *cryptohelper.CryptoHelper } @@ -50,6 +51,12 @@ func newMatrixClientFromEnv() *MatrixClient { Timeout: 8 * time.Second, }, } + locName := strings.TrimSpace(readEnv("MATRIX_TIMEZONE", "Europe/Berlin")) + if loc, err := time.LoadLocation(locName); err == nil { + m.TimeLocation = loc + } else { + m.TimeLocation = time.Local + } if readEnv("MATRIX_ENABLE_CRYPTO", "1") != "0" { m.crypto = initMatrixCrypto(hs, token) @@ -128,7 +135,7 @@ func (m *MatrixClient) FetchRecentMessages(ctx context.Context) ([]MatrixMessage } func (m *MatrixClient) mapEventToMessage(ctx context.Context, ev *event.Event) (MatrixMessage, bool) { - ts := time.UnixMilli(ev.Timestamp).Local().Format("02.01.2006 15:04") + ts := m.formatTimestamp(ev.Timestamp) sender := shortMatrixSender(string(ev.Sender)) switch ev.Type { @@ -152,6 +159,14 @@ func (m *MatrixClient) mapEventToMessage(ctx context.Context, ev *event.Event) ( } } +func (m *MatrixClient) formatTimestamp(tsMillis int64) string { + loc := m.TimeLocation + if loc == nil { + loc = time.Local + } + return time.UnixMilli(tsMillis).In(loc).Format("02.01.2006 15:04") +} + func extractBody(ev *event.Event) (string, bool) { if ev == nil { return "", false diff --git a/docker-compose.yml b/docker-compose.yml index 724c835..2dbeda2 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -16,3 +16,4 @@ services: MATRIX_ENABLE_CRYPTO: "${MATRIX_ENABLE_CRYPTO:-1}" MATRIX_PICKLE_KEY: "${MATRIX_PICKLE_KEY:-}" MATRIX_CRYPTO_STORE_PATH: "${MATRIX_CRYPTO_STORE_PATH:-/tmp/farmcal-matrix-crypto.db}" + MATRIX_TIMEZONE: "${MATRIX_TIMEZONE:-Europe/Berlin}"