feat: safeguard against invalid JSON

It appears that OpenWeatherMap sometimes sent out bad JSON.
Learn from the lesson and do better in this PR.

Signed-off-by: André Jaenisch <andre.jaenisch@posteo.de>
This commit is contained in:
André Jaenisch 2024-06-18 18:16:54 +02:00
parent 39d72e4c0d
commit c734c05614
No known key found for this signature in database
GPG Key ID: 5A668E771F1ED854
1 changed files with 13 additions and 2 deletions

View File

@ -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)