X-Git-Url: https://git.madduck.net/etc/awesome.git/blobdiff_plain/614b4b63966e4fbb46a52ec521a2f971a788e123..a4c86f9ace9dc5caad4f942af5d1be3eca47f666:/widget/weather.lua?ds=sidebyside diff --git a/widget/weather.lua b/widget/weather.lua index b75afc8..a9b886a 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 --]] @@ -20,7 +20,7 @@ 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'" @@ -114,22 +114,18 @@ 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 loc_now = os.time() - local loc_m = os.time { year = os.date("%Y"), month = os.date("%m"), day = os.date("%d"), hour = 0 } - local loc_t = os.difftime(loc_now, loc_m) - local loc_d = os.date("*t", loc_now) - local utc_d = os.date("!*t", loc_now) - local utc_now = os.time(utc_d) - local offdt = (loc_d.isdst and 1 or 0) * 3600 + 100 * (loc_d.min - utc_d.min) / 60 - local offset = os.difftime(loc_now, utc_now) + offdt - local offday = (offset < 0 and -86400) or 86400 - - if math.abs(loc_now - utc_now - offdt + loc_t) >= 86400 then - utc_now = utc_now + offday - end - - if offday * (loc_now - utc_now - offdt) > 0 then - sunrise = sunrise + offday + local loc_now = os.time() -- local time + local loc_m = os.time { year = os.date("%Y"), month = os.date("%m"), day = os.date("%d"), hour = 0 } -- local time from midnight + local loc_d = os.date("*t", loc_now) -- table YMDHMS for current local time (for TZ calculation) + local utc_d = os.date("!*t", loc_now) -- table YMDHMS for current UTC time + local utc_now = os.time(utc_d) -- UTC time now + local offdt = (loc_d.isdst and 1 or 0) * 3600 + 100 * (loc_d.min - utc_d.min) / 60 -- DST offset + local offset = os.difftime(loc_now, utc_now) + (loc_d.isdst and 1 or 0) * 3600 + 100 * (loc_d.min - utc_d.min) / 60 -- TZ offset (including DST) + local offday = (offset < 0 and -86400) or 86400 -- 24 hour correction value (+86400 or -86400) + + -- if current UTC time is earlier then local midnight -> positive offset (negative otherwise) + if offset * (loc_m - utc_now + offdt) > 0 then + sunrise = sunrise + offday -- Shift sunset and sunrise times by 24 hours sunset = sunset + offday end