Make stats feed update automatically
This commit is contained in:
+18
-1
@@ -5,12 +5,13 @@ defmodule LastFm.Refresh do
|
||||
|
||||
alias LastFm.Feed
|
||||
|
||||
@refresh_interval System.convert_time_unit(30, :second, :millisecond)
|
||||
@refresh_interval System.convert_time_unit(10, :second, :millisecond)
|
||||
|
||||
def start_link(config) do
|
||||
GenServer.start_link(__MODULE__, config, name: __MODULE__)
|
||||
end
|
||||
|
||||
@impl true
|
||||
def init(config) do
|
||||
if enabled?(config) do
|
||||
{:ok, config, {:continue, :refresh}}
|
||||
@@ -19,6 +20,7 @@ defmodule LastFm.Refresh do
|
||||
end
|
||||
end
|
||||
|
||||
@impl true
|
||||
def handle_continue(:refresh, config) do
|
||||
case config.api.get_recent_tracks(config.user, config.api_key) do
|
||||
{:ok, tracks} ->
|
||||
@@ -33,6 +35,21 @@ defmodule LastFm.Refresh do
|
||||
end
|
||||
end
|
||||
|
||||
@impl true
|
||||
def handle_info(:refresh, config) do
|
||||
case config.api.get_recent_tracks(config.user, config.api_key) do
|
||||
{:ok, tracks} ->
|
||||
Feed.update(tracks)
|
||||
Process.send_after(self(), :refresh, @refresh_interval)
|
||||
{:noreply, config}
|
||||
|
||||
{:error, _reason} ->
|
||||
# TODO: think about failure scenario - error is logged at the API level
|
||||
Process.send_after(self(), :refresh, @refresh_interval)
|
||||
{:noreply, config}
|
||||
end
|
||||
end
|
||||
|
||||
defp enabled?(config) do
|
||||
config.api && config.api_key
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user