From 6a7b50b35fefe10e3731c2b3afacb9cb60c920e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tar=C4=B1k=20Co=C5=9Fkun?= Date: Mon, 13 May 2024 15:08:58 +0300 Subject: [PATCH] Add 24-hour time format support for weather --- docs/configuration.md | 7 ++++++- internal/widget/weather.go | 13 +++++++++++-- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/docs/configuration.md b/docs/configuration.md index e698fdd..e54ebb0 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -647,6 +647,7 @@ Example: ```yaml - type: weather units: metric + hour-format: 12h location: London, United Kingdom ``` @@ -671,6 +672,7 @@ Each bar represents a 2 hour interval. The yellow background represents sunrise | ---- | ---- | -------- | ------- | | location | string | yes | | | units | string | no | metric | +| hour-format | string | no | 12h | | hide-location | boolean | no | false | | show-area-name | boolean | no | false | @@ -680,6 +682,9 @@ The name of the city and country to fetch weather information for. Attempting to ##### `units` Whether to show the temperature in celsius or fahrenheit, possible values are `metric` or `imperial`. +#### `hour-format` +Whether to show the hours of the day in 12-hour format or 24-hour format + ##### `hide-location` Optionally don't display the location name on the widget. @@ -1131,4 +1136,4 @@ Example: The source of the iframe. ##### `height` -The height of the iframe. The minimum allowed height is 50. +The height of the iframe. The minimum allowed height is 50. \ No newline at end of file diff --git a/internal/widget/weather.go b/internal/widget/weather.go index 9d90e03..723d1db 100644 --- a/internal/widget/weather.go +++ b/internal/widget/weather.go @@ -14,17 +14,26 @@ type Weather struct { Location string `yaml:"location"` ShowAreaName bool `yaml:"show-area-name"` HideLocation bool `yaml:"hide-location"` + HourFormat string `yaml:"hour-format"` Units string `yaml:"units"` Place *feed.PlaceJson `yaml:"-"` Weather *feed.Weather `yaml:"-"` TimeLabels [12]string `yaml:"-"` } -var timeLabels = [12]string{"2am", "4am", "6am", "8am", "10am", "12pm", "2pm", "4pm", "6pm", "8pm", "10pm", "12am"} +var timeLabels12h = [12]string{"2am", "4am", "6am", "8am", "10am", "12pm", "2pm", "4pm", "6pm", "8pm", "10pm", "12am"} +var timeLabels24h = [12]string{"02:00", "04:00", "06:00", "08:00", "10:00", "12:00", "14:00", "16:00", "18:00", "20:00", "22:00", "24:00"} func (widget *Weather) Initialize() error { widget.withTitle("Weather").withCacheOnTheHour() - widget.TimeLabels = timeLabels + + if widget.HourFormat == "" || widget.HourFormat == "12h" { + widget.TimeLabels = timeLabels12h + } else if widget.HourFormat == "24h" { + widget.TimeLabels = timeLabels24h + } else if widget.Units != "12h" && widget.Units != "24h" { + return fmt.Errorf("invalid hour format '%s' for weather, must be either 12h or 24h", widget.HourFormat) + } if widget.Units == "" { widget.Units = "metric"