Packages
tzdata
0.5.7
1.1.4
1.1.3
1.1.2
1.1.1
1.1.0
1.0.5
1.0.4
1.0.3
1.0.2
1.0.1
1.0.0
1.0.0-rc.1
1.0.0-rc.0
0.5.22
0.5.21
0.5.20
0.5.19
0.5.18
0.5.17
0.5.16
0.5.15
0.5.14
0.5.13
0.5.12
0.5.11
0.5.10
0.5.9
0.5.8
0.5.7
0.5.6
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.1.201805
0.1.201605
0.1.201603
0.1.201601
0.1.8
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
0.0.2
0.0.1
Tzdata is a parser and library for the tz database.
Current section
Files
Jump to
Current section
Files
lib/tzdata/release_updater.ex
defmodule Tzdata.ReleaseUpdater do
require Logger
use GenServer
alias Tzdata.DataLoader
def start_link() do
GenServer.start_link(__MODULE__, [], name: :tzdata_release_updater)
end
def init([]) do
Task.async(fn -> :timer.sleep(3000); Tzdata.ReleaseUpdater.check_if_time_to_update end)
{:ok, []}
end
@msecs_between_checking_date 18_000_000
@days_between_remote_poll 1
def check_if_time_to_update do
{tag, days} = DataLoader.days_since_last_remote_poll
case tag do
:ok ->
if days >= @days_between_remote_poll do
poll_for_update
end
_ -> poll_for_update
end
Task.async(fn -> :timer.sleep(@msecs_between_checking_date); Tzdata.ReleaseUpdater.check_if_time_to_update end)
end
def poll_for_update do
Logger.debug "Tzdata polling for update."
case loaded_tzdata_matches_iana_file_size? do
{:ok, true} ->
Logger.debug "Tzdata polling shows the loaded tz database is up to date."
:do_nothing
{:ok, false} ->
Tzdata.DataBuilder.load_and_save_table
Tzdata.EtsHolder.new_release_has_been_downloaded
_ -> :do_nothing
end
end
defp loaded_tzdata_matches_iana_file_size? do
{tag, filesize} = Tzdata.DataLoader.latest_file_size
case tag do
:ok ->
{:ok, filesize == Tzdata.ReleaseReader.archive_content_length}
_ -> {tag, nil}
end
end
end