X-Git-Url: https://git.madduck.net/etc/awesome.git/blobdiff_plain/eb8cec907a50f3fd6df4b14ae10b910444017f92..ab32be9ac64831812dd7af22cc7595bbc9324932:/widgets/yawn/init.lua?ds=inline diff --git a/widgets/yawn/init.lua b/widgets/yawn/init.lua index 9bed983..e7953e1 100644 --- a/widgets/yawn/init.lua +++ b/widgets/yawn/init.lua @@ -1,4 +1,3 @@ - --[[ Licensed under GNU General Public License v2 @@ -27,37 +26,36 @@ local setmetatable = setmetatable -- lain.widgets.yawn local yawn = { - icon = wibox.widget.imagebox(), - widget = wibox.widget.textbox(''), - notification_preset = {} + icon = wibox.widget.imagebox(), + widget = wibox.widget.textbox('') } -local project_path = debug.getinfo(1, 'S').source:match[[^@(.*/).*$]] -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 weather_data = nil -local notification = nil -local city_id = nil -local sky = nil -local settings = function() end +local project_path = debug.getinfo(1, 'S').source:match[[^@(.*/).*$]] +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 weather_data = nil +local notification = nil +local city_id = nil +local sky = nil +local settings = function() end + +yawn_notification_preset = {} local function fetch_weather() local url = api_url .. units_set .. city_id - local f = io.popen("curl --connect-timeout 1 -fsm 2 '" + local f = io.popen("curl --connect-timeout 1 -fsm 1 '" .. url .. "'" ) local text = f:read("*all") f:close() - -- handle no suitable icon found - yawn.icon:set_image(icon_path .. "na.png") - -- In case of no connection or invalid city ID -- widgets won't display if text == "" or text:match("City not found") then + 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") @@ -72,7 +70,15 @@ local function fetch_weather() -- 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,6 +113,13 @@ local function fetch_weather() sky = sky .. forecast:gsub(" ", ""):gsub("/", "") .. ".png" + -- In case there's no defined icon for current forecast + if io.open(sky) == nil then + sky = icon_path .. "na.png" + else + io.close(f) + end + -- Localization local f = io.open(localizations_path .. language, "r") if language:find("en_") == nil and f ~= nil @@ -122,17 +135,12 @@ local function fetch_weather() -- Finally setting infos yawn.icon:set_image(sky) - widget = wibox.widget.textbox() + widget = yawn.widget - forecast = weather_data:match(": %S+.-,"):gsub(": ", ""):gsub(",", "\n") + forecast = weather_data:match(": %S.-,"):gsub(": ", ""):gsub(",", "") units = units:gsub(" ", "") - notification_preset = {} - -- anche notification preset, con fg, bg e position settings() - - yawn.widget = widget - yawn.notification_preset = notification_preset end function yawn.hide() @@ -151,7 +159,7 @@ function yawn.show(t_out) yawn.hide() notification = naughty.notify({ - preset = yawn.notification_preset, + preset = yawn_notification_preset, text = weather_data, icon = sky, timeout = t_out @@ -176,7 +184,7 @@ function yawn.register(id, args) yawn.hide() end) - return { icon = yawn.icon, widget = yawn.widget } + return yawn end function yawn.attach(widget, id, args)