Current section
Files
Jump to
Current section
Files
lib/server.ex
defmodule Gigex.Server do
alias Gigex.Cache
use GenServer
@timer_interval :timer.hours(2)
@spec start_link(arg :: any()) :: :ignore | {:error, any} | {:ok, pid}
def start_link(_arg) do
GenServer.start_link(__MODULE__, [], name: __MODULE__)
end
@impl GenServer
def init(_args) do
{:ok, %{ref: nil}, {:continue, :get_gigs}}
end
@impl GenServer
def handle_continue(:get_gigs, state) do
Gigex.gigs()
ref = start_timer()
{:noreply, %{state | ref: ref}}
end
@impl GenServer
def handle_info(:refresh_cache, %{ref: ref} = state) do
Cache.purge()
Gigex.gigs()
new_ref = refresh_timer(ref)
{:noreply, %{state | ref: new_ref}}
end
defp start_timer() do
Process.send_after(self(), :refresh_cache, @timer_interval)
end
defp refresh_timer(ref) do
Process.cancel_timer(ref)
start_timer()
end
end