Move refresh config and callers to ListeningStats
This commit is contained in:
+5
-3
@@ -53,14 +53,16 @@ user_agent = "MusicLibrary/0.1.0 ( cloud8421@gmail.com )"
|
||||
|
||||
config :music_library, LastFm,
|
||||
user: "username",
|
||||
auto_refresh: true,
|
||||
# refresh every 5 minutes
|
||||
refresh_interval: System.convert_time_unit(300, :second, :millisecond),
|
||||
api_key: "change me",
|
||||
shared_secret: "change me",
|
||||
user_agent: user_agent,
|
||||
api_cooldown: 500
|
||||
|
||||
config :music_library, MusicLibrary.ListeningStats.Refresh,
|
||||
auto_refresh: true,
|
||||
# refresh every 5 minutes
|
||||
refresh_interval: System.convert_time_unit(300, :second, :millisecond)
|
||||
|
||||
config :music_library, MusicBrainz, user_agent: user_agent, api_cooldown: 500
|
||||
|
||||
config :music_library, Discogs,
|
||||
|
||||
+1
-1
@@ -81,7 +81,7 @@ config :music_library, monitoring_routes: true
|
||||
|
||||
config :music_library, MusicLibrary.Mailer, adapter: Swoosh.Adapters.Local
|
||||
|
||||
config :music_library, LastFm,
|
||||
config :music_library, MusicLibrary.ListeningStats.Refresh,
|
||||
refresh_interval: System.convert_time_unit(500, :second, :millisecond)
|
||||
|
||||
# Do not include metadata nor timestamps in development logs
|
||||
|
||||
+2
-1
@@ -56,13 +56,14 @@ config :phoenix_live_view,
|
||||
config :music_library, monitoring_routes: true
|
||||
|
||||
config :music_library, LastFm,
|
||||
auto_refresh: false,
|
||||
req_options: [
|
||||
plug: {Req.Test, LastFm.API},
|
||||
max_retries: 0
|
||||
],
|
||||
api_cooldown: 0
|
||||
|
||||
config :music_library, MusicLibrary.ListeningStats.Refresh, auto_refresh: false
|
||||
|
||||
config :music_library, MusicBrainz,
|
||||
req_options: [
|
||||
plug: {Req.Test, MusicBrainz.API},
|
||||
|
||||
+1
-7
@@ -3,15 +3,9 @@ defmodule LastFm do
|
||||
Last.fm API facade for scrobbling and listening history.
|
||||
"""
|
||||
|
||||
alias LastFm.{API, Feed, Refresh, Scrobble, Track, Worker}
|
||||
alias LastFm.{API, Scrobble, Track, Worker}
|
||||
alias MusicLibrary.{BackgroundRepo, Repo}
|
||||
|
||||
@spec subscribe_to_feed() :: :ok
|
||||
def subscribe_to_feed, do: Feed.subscribe()
|
||||
|
||||
@spec refresh_scrobbled_tracks() :: :ok | {:error, term()}
|
||||
def refresh_scrobbled_tracks, do: Refresh.refresh()
|
||||
|
||||
@spec get_tracks(keyword()) :: {:ok, [Track.t()]} | {:error, term()}
|
||||
def get_tracks(opts) do
|
||||
last_fm_config = last_fm_config()
|
||||
|
||||
@@ -3,8 +3,6 @@ defmodule LastFm.Config do
|
||||
api_key: String.t(),
|
||||
shared_secret: String.t(),
|
||||
user: String.t(),
|
||||
auto_refresh: boolean(),
|
||||
refresh_interval: pos_integer(),
|
||||
user_agent: String.t(),
|
||||
req_options: Keyword.t(),
|
||||
api_cooldown: non_neg_integer()
|
||||
@@ -14,8 +12,6 @@ defmodule LastFm.Config do
|
||||
defstruct api_key: "",
|
||||
shared_secret: "",
|
||||
user: "",
|
||||
auto_refresh: true,
|
||||
refresh_interval: 60_000,
|
||||
user_agent: "change me",
|
||||
req_options: [],
|
||||
api_cooldown: 500
|
||||
@@ -33,16 +29,6 @@ defmodule LastFm.Config do
|
||||
type: :string,
|
||||
required: true
|
||||
],
|
||||
auto_refresh: [
|
||||
type: :boolean,
|
||||
required: false,
|
||||
default: true
|
||||
],
|
||||
refresh_interval: [
|
||||
type: :pos_integer,
|
||||
required: false,
|
||||
default: 60_000
|
||||
],
|
||||
user_agent: [
|
||||
type: :string,
|
||||
required: false,
|
||||
|
||||
@@ -4,7 +4,7 @@ defmodule LastFm.Import do
|
||||
@spec batch(keyword()) :: {:ok, non_neg_integer()} | {:error, term()}
|
||||
def batch(opts) do
|
||||
with {:ok, tracks} <- LastFm.get_tracks(opts) do
|
||||
LastFm.Feed.update(tracks)
|
||||
MusicLibrary.ListeningStats.update(tracks)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -24,7 +24,9 @@ defmodule MusicLibrary.Application do
|
||||
repos: Application.fetch_env!(:music_library, :ecto_repos), skip: skip_migrations?()},
|
||||
{Task.Supervisor, name: MusicLibrary.TaskSupervisor},
|
||||
{Phoenix.PubSub, name: MusicLibrary.PubSub},
|
||||
{LastFm.Supervisor, LastFm.Config.resolve(:music_library)},
|
||||
{MusicLibrary.ListeningStats.Refresh,
|
||||
{LastFm.Config.resolve(:music_library),
|
||||
Application.fetch_env!(:music_library, MusicLibrary.ListeningStats.Refresh)}},
|
||||
# Start a worker by calling: MusicLibrary.Worker.start_link(arg)
|
||||
# {MusicLibrary.Worker, arg},
|
||||
# Start to serve requests, typically the last entry
|
||||
|
||||
@@ -222,7 +222,7 @@ defmodule MusicLibraryWeb.ScrobbledTracksLive.Index do
|
||||
)
|
||||
|
||||
if connected?(socket) do
|
||||
LastFm.subscribe_to_feed()
|
||||
ListeningStats.subscribe()
|
||||
end
|
||||
|
||||
{:ok, socket}
|
||||
@@ -288,7 +288,7 @@ defmodule MusicLibraryWeb.ScrobbledTracksLive.Index do
|
||||
end
|
||||
|
||||
def handle_event("refresh_lastfm_feed", _, socket) do
|
||||
LastFm.refresh_scrobbled_tracks()
|
||||
ListeningStats.refresh()
|
||||
{:noreply, socket}
|
||||
end
|
||||
|
||||
|
||||
@@ -65,7 +65,7 @@ defmodule MusicLibraryWeb.StatsLive.Index do
|
||||
|> Collection.group_records_by_release_group()
|
||||
|
||||
if connected?(socket) do
|
||||
LastFm.subscribe_to_feed()
|
||||
ListeningStats.subscribe()
|
||||
end
|
||||
|
||||
{:ok,
|
||||
@@ -93,7 +93,7 @@ defmodule MusicLibraryWeb.StatsLive.Index do
|
||||
|
||||
@impl true
|
||||
def handle_event("refresh_lastfm_feed", _, socket) do
|
||||
LastFm.refresh_scrobbled_tracks()
|
||||
ListeningStats.refresh()
|
||||
{:noreply, socket}
|
||||
end
|
||||
|
||||
|
||||
@@ -6,8 +6,6 @@ defmodule LastFm.ConfigTest do
|
||||
assert %LastFm.Config{
|
||||
api_key: api_key,
|
||||
user: user,
|
||||
auto_refresh: false,
|
||||
refresh_interval: refresh_interval,
|
||||
user_agent: user_agent
|
||||
} =
|
||||
LastFm.Config.resolve(:music_library)
|
||||
@@ -15,7 +13,6 @@ defmodule LastFm.ConfigTest do
|
||||
assert is_binary(api_key)
|
||||
assert is_binary(user)
|
||||
assert is_binary(user_agent)
|
||||
assert is_integer(refresh_interval)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
defmodule LastFm.FeedTest do
|
||||
use MusicLibrary.DataCase
|
||||
|
||||
alias LastFm.{Album, Artist, Feed, Track}
|
||||
alias LastFm.{Album, Artist, Track}
|
||||
alias MusicLibrary.ListeningStats
|
||||
|
||||
@track_one %Track{
|
||||
musicbrainz_id: "5689211e-9afa-3c3e-8e34-63dc0de45ef1",
|
||||
@@ -38,13 +39,13 @@ defmodule LastFm.FeedTest do
|
||||
|
||||
describe "update and broadcast" do
|
||||
test "stores the track and broadcasts the updated track count" do
|
||||
:ok = Feed.subscribe()
|
||||
:ok = ListeningStats.subscribe()
|
||||
|
||||
assert {:ok, 2} == Feed.update([@track_two, @track_one])
|
||||
assert {:ok, 2} == ListeningStats.update([@track_two, @track_one])
|
||||
assert_receive %{track_count: 2}
|
||||
|
||||
# Tracks have already been inserted, count of new tracks is 0
|
||||
assert {:ok, 0} == Feed.update([@track_two, @track_one])
|
||||
assert {:ok, 0} == ListeningStats.update([@track_two, @track_one])
|
||||
assert_receive %{track_count: 0}
|
||||
end
|
||||
end
|
||||
|
||||
@@ -225,7 +225,7 @@ defmodule MusicLibraryWeb.StatsLive.IndexTest do
|
||||
last_fm_data: %{}
|
||||
}
|
||||
|
||||
LastFm.Feed.update([
|
||||
MusicLibrary.ListeningStats.update([
|
||||
machinarium_soundtrack_track,
|
||||
the_last_flight_track,
|
||||
the_mystery_of_time_track,
|
||||
|
||||
Reference in New Issue
Block a user