X-Git-Url: https://git.madduck.net/etc/awesome.git/blobdiff_plain/4bde4b5eea6ad1352078228c0d146f41b4c893e4..3e735d3effeb1c3c94c6c7f01b99d49e31a0d712:/widgets/yawn/init.lua diff --git a/widgets/yawn/init.lua b/widgets/yawn/init.lua index 4c90df4..148f547 100644 --- a/widgets/yawn/init.lua +++ b/widgets/yawn/init.lua @@ -36,7 +36,7 @@ local localizations_path = project_path .. 'localizations/' local icon_path = project_path .. 'icons/' local api_url = 'http://weather.yahooapis.com/forecastrss' local units_set = '?u=c&w=' -- Default is Celsius -local language = string.match(os.getenv("LANG"), "(%S*$*)[.]") +local language = string.match(os.getenv("LANG"), "(%S*$*)[.]") or "en_US" -- if LANG is not set local weather_data = nil local notification = nil local city_id = nil @@ -47,9 +47,8 @@ yawn_notification_preset = {} local function fetch_weather() local url = api_url .. units_set .. city_id - local f = io.popen("curl --connect-timeout 1 -fsm 1 '" - .. url .. "'" ) - local text = f:read("*all") + local f = io.popen("curl --connect-timeout 1 -fsm 3 '" .. url .. "'" ) + local text = f:read("*a") f:close() -- In case of no connection or invalid city ID @@ -59,19 +58,27 @@ local function fetch_weather() yawn.icon:set_image(icon_path .. "na.png") if text == "" then weather_data = "Service not available at the moment." - yawn.widget:set_text("N/A") + yawn.widget:set_text(" N/A ") else weather_data = "City not found!\n" .. "Are you sure " .. city_id .. " is your Yahoo city ID?" - yawn.widget:set_text("?") + yawn.widget:set_text(" ? ") end return end -- Processing raw data weather_data = text:gsub("<.->", "") - weather_data = weather_data:match("Current Conditions:.-Full") + weather_data = weather_data:match("Current Conditions:.-Full") or "" + + -- may still happens in case of bad connectivity + if weather_data == "" then + yawn.icon:set_image(icon_path .. "na.png") + yawn.widget:set_text(" ? ") + return + end + weather_data = weather_data:gsub("Current Conditions:.-\n", "Now: ") weather_data = weather_data:gsub("Forecast:.-\n", "") weather_data = weather_data:gsub("\nFull", "") @@ -107,11 +114,8 @@ local function fetch_weather() sky = sky .. forecast:gsub(" ", ""):gsub("/", "") .. ".png" -- In case there's no defined icon for current forecast - f = io.popen(sky) - if f == nil then + if io.open(sky) == nil then sky = icon_path .. "na.png" - else - io.close(f) end -- Localization @@ -131,7 +135,8 @@ local function fetch_weather() yawn.icon:set_image(sky) widget = yawn.widget - forecast = weather_data:match(": %S+.-,"):gsub(": ", ""):gsub(",", "\n") + _data = weather_data:match(": %S.-,") or weather_data + forecast = _data:gsub(": ", ""):gsub(",", "") units = units:gsub(" ", "") settings() @@ -145,7 +150,7 @@ function yawn.hide() end function yawn.show(t_out) - if yawn.widget._layout.text == "?" + if yawn.widget._layout.text:match("?") then fetch_weather(settings) end @@ -156,7 +161,8 @@ function yawn.show(t_out) preset = yawn_notification_preset, text = weather_data, icon = sky, - timeout = t_out + timeout = t_out, + screen = client.focus and client.focus.screen or 1 }) end