From 43e95217f233476b4133656d760e58651b55844b Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Wed, 22 Jul 2026 15:31:01 -0700 Subject: [PATCH] Reload weather location when opening panel --- shell/plugins/panels/weather/Panel.qml | 2 ++ test/shell.d/weather-test.sh | 9 +++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/shell/plugins/panels/weather/Panel.qml b/shell/plugins/panels/weather/Panel.qml index 4ff00c79..a4f86c82 100644 --- a/shell/plugins/panels/weather/Panel.qml +++ b/shell/plugins/panels/weather/Panel.qml @@ -19,6 +19,7 @@ Panel { openedFromHotkey = false setCenterHoverRevealSuppressed(false) root.controller.show() + locationFile.reload() root.refresh() } @@ -26,6 +27,7 @@ Panel { openedFromHotkey = true setCenterHoverRevealSuppressed(true) root.controller.show() + locationFile.reload() root.refresh() } diff --git a/test/shell.d/weather-test.sh b/test/shell.d/weather-test.sh index fe5c1a04..90365e2d 100644 --- a/test/shell.d/weather-test.sh +++ b/test/shell.d/weather-test.sh @@ -7,6 +7,7 @@ source "$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)/base-test.sh" run_node_test <<'JS' const fs = require('fs') const weather = requireFromRoot('shell/plugins/panels/weather/Model.js') +const panelSource = fs.readFileSync(root + '/shell/plugins/panels/weather/Panel.qml', 'utf8') assertDeepEqual( weather.parseWeatherStatus('{"text":"☀","class":"sunny"}'), @@ -115,13 +116,17 @@ assert(weather.iconForOpenMeteoCode(45, true) !== weather.iconForOpenMeteoCode(4 assertEqual(weather.provisionalCurrentIcon({ weatherCode: 113 }, ''), weather.iconForCode(113, false), 'weather uses wttr to fill an empty initial icon') assertEqual(weather.provisionalCurrentIcon({ weatherCode: 113 }, 'night'), 'night', 'weather refresh preserves a resolved day-night icon') assert( - fs.readFileSync(root + '/shell/plugins/panels/weather/Panel.qml', 'utf8').includes('text: root.label || "—"'), + panelSource.includes('text: root.label || "—"'), 'weather hero and bar use the same resolved icon' ) assert( - fs.readFileSync(root + '/shell/plugins/panels/weather/Panel.qml', 'utf8').includes('onReturnRequested: root.startEditingLocation()'), + panelSource.includes('onReturnRequested: root.startEditingLocation()'), 'weather focuses city input when Return is pressed' ) +assert( + panelSource.split('root.controller.show()\n locationFile.reload()\n root.refresh()').length === 3, + 'weather reloads external location changes whenever either open path runs' +) assert(!weather.weatherResponseCompletesSave(true, 'wttr'), 'weather keeps the spinner through a non-authoritative pinned-location response') assert(weather.weatherResponseCompletesSave(true, 'open-meteo'), 'weather completes a pinned-location save with Open-Meteo data') assert(weather.weatherResponseCompletesSave(false, 'wttr'), 'weather completes a name-only location save with wttr data')