Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Weather widget - day/time in UTC #360

Merged
merged 7 commits into from
Sep 11, 2017
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 17 additions & 16 deletions widget/weather.lua
Original file line number Diff line number Diff line change
Expand Up @@ -26,11 +26,6 @@ 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
Expand Down Expand Up @@ -119,19 +114,26 @@ 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_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
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
sunset = sunset + offday
end

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")
Expand All @@ -144,7 +146,6 @@ local function factory(args)
weather.icon_path = icons_path .. "na.png"
weather.widget:set_markup(weather_na_markup)
end

weather.icon:set_image(weather.icon_path)
end)
end
Expand Down