From 80f945555ccff5666609013afc4d1a84f1e9d3cf Mon Sep 17 00:00:00 2001 From: Claudio Ortolina Date: Wed, 13 Nov 2024 11:53:45 +0000 Subject: [PATCH] Add status for each track in the scrobble activity --- lib/music_library/collection.ex | 10 ++++++ lib/music_library/wishlist.ex | 10 ++++++ .../live/stats_live/index.ex | 10 ++++++ .../live/stats_live/index.html.heex | 35 ++++++++++++++++++- priv/gettext/default.pot | 20 ++++++++--- 5 files changed, 79 insertions(+), 6 deletions(-) diff --git a/lib/music_library/collection.ex b/lib/music_library/collection.ex index 55f200c1..0a294fa0 100644 --- a/lib/music_library/collection.ex +++ b/lib/music_library/collection.ex @@ -46,6 +46,16 @@ defmodule MusicLibrary.Collection do Repo.one!(q) end + def collected_release_ids(release_ids) do + q = + from r in fragment("records, json_each(records.release_ids)"), + where: r.value in ^release_ids, + where: fragment("records.purchased_at IS NOT NULL"), + select: r.value + + Repo.all(q) + end + defp base_search do from r in Record, where: not is_nil(r.purchased_at) diff --git a/lib/music_library/wishlist.ex b/lib/music_library/wishlist.ex index 5bca2e45..b1fb9669 100644 --- a/lib/music_library/wishlist.ex +++ b/lib/music_library/wishlist.ex @@ -20,6 +20,16 @@ defmodule MusicLibrary.Wishlist do Repo.aggregate(base_search(), :count) end + def wishlisted_release_ids(release_ids) do + q = + from r in fragment("records, json_each(records.release_ids)"), + where: r.value in ^release_ids, + where: fragment("records.purchased_at IS NULL"), + select: r.value + + Repo.all(q) + end + defp base_search do from r in Record, where: is_nil(r.purchased_at) diff --git a/lib/music_library_web/live/stats_live/index.ex b/lib/music_library_web/live/stats_live/index.ex index 13835280..065c8326 100644 --- a/lib/music_library_web/live/stats_live/index.ex +++ b/lib/music_library_web/live/stats_live/index.ex @@ -20,6 +20,14 @@ defmodule MusicLibraryWeb.StatsLive.Index do recent_tracks = LastFm.Feed.all() + release_ids = + recent_tracks + |> Enum.map(fn t -> t.album.musicbrainz_id end) + |> Enum.uniq() + + collected_release_ids = Collection.collected_release_ids(release_ids) + wishlisted_release_ids = Wishlist.wishlisted_release_ids(release_ids) + if connected?(socket) do LastFm.Feed.subscribe() end @@ -37,6 +45,8 @@ defmodule MusicLibraryWeb.StatsLive.Index do collection_count: collection_count, wishlist_count: wishlist_count, latest_record: latest_record, + collected_release_ids: collected_release_ids, + wishlisted_release_ids: wishlisted_release_ids, nav_section: :stats )} end 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 608def8a..baaa89d1 100644 --- a/lib/music_library_web/live/stats_live/index.html.heex +++ b/lib/music_library_web/live/stats_live/index.html.heex @@ -100,7 +100,40 @@ -
+ + <%= gettext("Collected") %> + + + <%= gettext("Wishlisted") %> + + +