diff --git a/lib/last_fm.ex b/lib/last_fm.ex index f0974225..df36bd52 100644 --- a/lib/last_fm.ex +++ b/lib/last_fm.ex @@ -2,7 +2,7 @@ defmodule LastFm do alias LastFm.{API, Feed, Refresh, Scrobble, Track, Worker} alias MusicLibrary.{BackgroundRepo, Repo} - def get_scrobbled_tracks, do: Feed.all_tracks(100) + def get_scrobbled_tracks(limit \\ 100), do: Feed.all_tracks(limit) def subscribe_to_feed, do: Feed.subscribe() diff --git a/lib/last_fm/feed.ex b/lib/last_fm/feed.ex index e5a56d5b..1e4e864f 100644 --- a/lib/last_fm/feed.ex +++ b/lib/last_fm/feed.ex @@ -28,12 +28,13 @@ defmodule LastFm.Feed do |> Enum.map(fn t -> Map.take(t, @insertable_fields) end) |> Enum.map(&Map.to_list/1) - MusicLibrary.Repo.insert_all(LastFm.Track, track_params, - on_conflict: :nothing, - conflict_target: [:scrobbled_at_uts, :title] - ) + {count, nil} = + MusicLibrary.Repo.insert_all(LastFm.Track, track_params, + on_conflict: :nothing, + conflict_target: [:scrobbled_at_uts, :title] + ) - Phoenix.PubSub.broadcast(LastFm.PubSub, "feed:update", %{tracks: tracks}) + Phoenix.PubSub.broadcast(LastFm.PubSub, "feed:update", %{track_count: count}) end @spec all_tracks(non_neg_integer()) :: [LastFm.Track.t()] diff --git a/lib/music_library_web/live/stats_live/index.ex b/lib/music_library_web/live/stats_live/index.ex index 5e2a24e8..efd9e974 100644 --- a/lib/music_library_web/live/stats_live/index.ex +++ b/lib/music_library_web/live/stats_live/index.ex @@ -143,7 +143,13 @@ defmodule MusicLibraryWeb.StatsLive.Index do |> assign(scrobble_activity_mode: String.to_existing_atom(mode))} end - def handle_info(%{tracks: recent_tracks}, socket) do + def handle_info(%{track_count: 0}, socket) do + {:noreply, socket} + end + + def handle_info(%{track_count: _count}, socket) do + recent_tracks = LastFm.get_scrobbled_tracks() + {:noreply, socket |> assign_scrobble_activity(recent_tracks)} diff --git a/test/last_fm/feed_test.exs b/test/last_fm/feed_test.exs index ca4a2a31..28fc3d4e 100644 --- a/test/last_fm/feed_test.exs +++ b/test/last_fm/feed_test.exs @@ -37,11 +37,15 @@ defmodule LastFm.FeedTest do } describe "update and broadcast" do - test "it stores the track and broadcasts the update" do + test "it stores the track and broadcasts the updated track count" do :ok = Feed.subscribe() - :ok = Feed.update([@track_two, @track_one]) - assert_receive %{tracks: [@track_two, @track_one]} + :ok = Feed.update([@track_two, @track_one]) + assert_receive %{track_count: 2} + + # Tracks have already been inserted, count of new tracks is 0 + :ok = Feed.update([@track_two, @track_one]) + assert_receive %{track_count: 0} end test "it returns tracks in descending order of scrobble" do