From c734c05614edd6dbb2dd935475cc84947c26282a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Jaenisch?= Date: Tue, 18 Jun 2024 18:16:54 +0200 Subject: [PATCH] feat: safeguard against invalid JSON MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It appears that OpenWeatherMap sometimes sent out bad JSON. Learn from the lesson and do better in this PR. Signed-off-by: André Jaenisch --- weather-widget/weather.lua | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/weather-widget/weather.lua b/weather-widget/weather.lua index 3d0a5f8..24288e4 100644 --- a/weather-widget/weather.lua +++ b/weather-widget/weather.lua @@ -180,7 +180,7 @@ local function worker(user_args) local timeout = args.timeout or 120 local ICONS_DIR = WIDGET_DIR .. '/icons/' .. icon_pack_name .. '/' - local weather_api = + local weather_api = ('https://api.weatherapi.com/v1/current.json' .. '?q=' .. coordinates[1] .. ',' .. coordinates[2] .. '&key=' .. api_key .. '&units=' .. units .. '&lang=' .. LANG) @@ -322,13 +322,24 @@ local function worker(user_args) return end + if string.match(stdout, '<') ~= nil then + if not warning_shown then + warning_shown = true + widget:is_ok(false) + tooltip:add_to_object(widget) + + widget:connect_signal('mouse::enter', function() tooltip.text = stdout end) + end + return + end + warning_shown = false tooltip:remove_from_object(widget) widget:is_ok(true) local result = json.decode(stdout) widget:set_image(ICONS_DIR .. icon_map[result.current.condition.code] .. icons_extension) - -- TODO: if units isn't "metric", read temp_f instead + -- TODO: if units isn't "metric", read temp_f instead widget:set_text(gen_temperature_str(result.current.temp_c, '%.0f', both_units_widget, units)) current_weather_widget:update(result.current)