diff --git a/lib/last_fm/feed.ex b/lib/last_fm/feed.ex index 3378c01a..38ccffda 100644 --- a/lib/last_fm/feed.ex +++ b/lib/last_fm/feed.ex @@ -17,11 +17,19 @@ defmodule LastFm.Feed do :ets.delete_all_objects(__MODULE__) :ets.insert(__MODULE__, data) - Phoenix.PubSub.broadcast(LastFm.PubSub, "feed:update", %{tracks: data}) + Phoenix.PubSub.broadcast(LastFm.PubSub, "feed:update", %{tracks: tracks}) end def all do - :ets.tab2list(__MODULE__) + m = [ + { + {:_, :_}, + [], + [{:element, 2, :"$_"}] + } + ] + + :ets.select(__MODULE__, m) |> Enum.reverse() end diff --git a/lib/music_library_web/live/stats_live/index.ex b/lib/music_library_web/live/stats_live/index.ex index 86d9cfb3..60d1c61c 100644 --- a/lib/music_library_web/live/stats_live/index.ex +++ b/lib/music_library_web/live/stats_live/index.ex @@ -26,6 +26,10 @@ defmodule MusicLibraryWeb.StatsLive.Index do {:ok, socket + |> stream_configure(:recent_tracks, + dom_id: fn track -> "track-#{track.scrobbled_at_uts}" end + ) + |> stream(:recent_tracks, recent_tracks) |> assign( page_title: gettext("Stats"), collection_count_by_format: collection_count_by_format, @@ -33,20 +37,12 @@ defmodule MusicLibraryWeb.StatsLive.Index do collection_count: collection_count, wishlist_count: wishlist_count, latest_record: latest_record, - recent_tracks: recent_tracks, nav_section: :stats )} end def handle_info(%{tracks: tracks}, socket) do - socket = - if socket.assigns.recent_tracks !== tracks do - assign(socket, :recent_tracks, tracks) - else - socket - end - - {:noreply, socket} + {:noreply, stream(socket, :recent_tracks, tracks, reset: true)} end # The Tailwind build step requires all needed classes to be explicitly referenced diff --git a/lib/music_library_web/live/stats_live/index.html.heex b/lib/music_library_web/live/stats_live/index.html.heex index 8266ec64..ad405a9e 100644 --- a/lib/music_library_web/live/stats_live/index.html.heex +++ b/lib/music_library_web/live/stats_live/index.html.heex @@ -65,8 +65,8 @@