X-Git-Url: https://git.madduck.net/etc/awesome.git/blobdiff_plain/a5b05fa47994ab1c7b15d59b24fb3f5aa2abd877..1ebfa854f95e3abcd8b41a1798646a9db6e8408b:/widget/weather.lua diff --git a/widget/weather.lua b/widget/weather.lua index 17fc4d7..b2ccc19 100644 --- a/widget/weather.lua +++ b/widget/weather.lua @@ -11,12 +11,8 @@ local json = require("lain.util").dkjson local focused = require("awful.screen").focused local naughty = require("naughty") local wibox = require("wibox") -local math = { floor = math.floor } -local os = { time = os.time, - date = os.date } -local string = { format = string.format, - gsub = string.gsub } -local tonumber = tonumber + +local math, os, string, tonumber = math, os, string, tonumber -- OpenWeatherMap -- current weather and X-days forecast @@ -31,6 +27,11 @@ local function factory(args) 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 @@ -116,10 +117,20 @@ local function factory(args) weather_now, pos, err = json.decode(f, 1, nil) if not err and type(weather_now) == "table" and tonumber(weather_now["cod"]) == 200 then - local now = os.time(os.date("!*t")) 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 if sunrise <= now and now <= sunset then icon = string.gsub(icon, "n", "d")