X-Git-Url: https://git.madduck.net/etc/awesome.git/blobdiff_plain/1b12fd2319e1cd02706fd3a7ec0f0203ca2782d2..71ca1bd76739f5d4f11cc065f2943f1cb87627ab:/widget/weather.lua diff --git a/widget/weather.lua b/widget/weather.lua index c7563d5..9c1e797 100644 --- a/widget/weather.lua +++ b/widget/weather.lua @@ -1,7 +1,7 @@ --[[ Licensed under GNU General Public License v2 - * (c) 2015, Luke Bonham + * (c) 2015, Luca CPZ --]] @@ -10,8 +10,11 @@ local json = require("lain.util").dkjson local focused = require("awful.screen").focused local naughty = require("naughty") local wibox = require("wibox") - -local math, os, string, tonumber = math, os, string, tonumber +local math = math +local os = os +local string = string +local type = type +local tonumber = tonumber -- OpenWeatherMap -- current weather and X-days forecast @@ -20,17 +23,12 @@ local math, os, string, tonumber = math, os, string, tonumber local function factory(args) local weather = { widget = wibox.widget.textbox() } local args = args or {} - local APPID = args.APPID or "3e321f9414eaedbfab34983bda77a66e" -- lain default + local APPID = args.APPID or "3e321f9414eaedbfab34983bda77a66e" -- lain's default local timeout = args.timeout or 60 * 15 -- 15 min local timeout_forecast = args.timeout or 60 * 60 * 24 -- 24 hrs local current_call = args.current_call or "curl -s 'http://api.openweathermap.org/data/2.5/weather?id=%s&units=%s&lang=%s&APPID=%s'" local forecast_call = args.forecast_call or "curl -s 'http://api.openweathermap.org/data/2.5/forecast/daily?id=%s&units=%s&lang=%s&cnt=%s&APPID=%s'" local city_id = args.city_id or 0 -- placeholder - local utc_offset = args.utc_offset or - function () - local now = os.time() - return os.difftime(now, os.time(os.date("!*t", now))) + ((os.date("*t").isdst and 1 or 0) * 3600) - end local units = args.units or "metric" local lang = args.lang or "en" local cnt = args.cnt or 5 @@ -54,7 +52,7 @@ local function factory(args) weather.icon_path = icons_path .. "na.png" weather.icon = wibox.widget.imagebox(weather.icon_path) - function weather.show(t_out) + function weather.show(seconds) weather.hide() if followtag then @@ -66,12 +64,12 @@ local function factory(args) weather.forecast_update() end - weather.notification = naughty.notify({ + weather.notification = naughty.notify { + preset = notification_preset, text = weather.notification_text, icon = weather.icon_path, - timeout = t_out, - preset = notification_preset - }) + timeout = type(seconds == "number") and seconds or notification_preset.timeout + } end function weather.hide() @@ -119,19 +117,9 @@ local function factory(args) local sunrise = tonumber(weather_now["sys"]["sunrise"]) local sunset = tonumber(weather_now["sys"]["sunset"]) local icon = weather_now["weather"][1]["icon"] - local now = os.time() - local loc_m = os.time { year = os.date("%Y"), month = os.date("%m"), day = os.date("%d"), hour = 0 } - local offset = utc_offset() - local utc_m = loc_m - offset - - -- if we are 1 day after the GMT, return 1 day back, and viceversa - if offset > 0 and (now - utc_m) >= 86400 then - utc_m = utc_m + 86400 - elseif offset < 0 and (utc_m - now) >= 86400 then - utc_m = utc_m - 86400 - end + local loc_now = os.time() - if sunrise <= now and now <= sunset then + if sunrise <= loc_now and loc_now <= sunset then icon = string.gsub(icon, "n", "d") else icon = string.gsub(icon, "d", "n")