Make stats feed update automatically

This commit is contained in:
Claudio Ortolina
2024-11-04 12:22:23 +00:00
parent 7139e0ad8f
commit 065ca4bf7c
5 changed files with 42 additions and 2 deletions
+18 -1
View File
@@ -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