Link to collected albums in scrobble activity

This commit is contained in:
Claudio Ortolina
2025-01-01 16:11:14 +00:00
parent 48a4b308cc
commit 5973206da3
4 changed files with 24 additions and 16 deletions
+3 -3
View File
@@ -50,14 +50,14 @@ defmodule MusicLibrary.Collection do
Repo.one!(q) Repo.one!(q)
end end
def collected_release_ids(release_ids) do def collected_releases(release_ids) do
q = q =
from r in fragment("records, json_each(records.release_ids)"), from r in fragment("records, json_each(records.release_ids)"),
where: r.value in ^release_ids, where: r.value in ^release_ids,
where: fragment("records.purchased_at IS NOT NULL"), where: fragment("records.purchased_at IS NOT NULL"),
select: r.value select: %{record_id: fragment("records.id"), release_id: r.value}
q |> Repo.all() |> MapSet.new() q |> Repo.all()
end end
defp base_search do defp base_search do
@@ -88,7 +88,7 @@ defmodule MusicLibraryWeb.StatsLive.Index do
defp assign_scrobble_activity(socket, recent_tracks) do defp assign_scrobble_activity(socket, recent_tracks) do
recent_release_ids = recent_release_ids(recent_tracks) recent_release_ids = recent_release_ids(recent_tracks)
collected_release_ids = Collection.collected_release_ids(recent_release_ids) collected_releases = Collection.collected_releases(recent_release_ids)
wishlisted_release_ids = Wishlist.wishlisted_release_ids(recent_release_ids) wishlisted_release_ids = Wishlist.wishlisted_release_ids(recent_release_ids)
all_artist_ids = Artists.get_all_artist_ids() all_artist_ids = Artists.get_all_artist_ids()
@@ -96,7 +96,7 @@ defmodule MusicLibraryWeb.StatsLive.Index do
artist_ids = MapSet.intersection(all_artist_ids, recent_artist_ids) artist_ids = MapSet.intersection(all_artist_ids, recent_artist_ids)
assign(socket, assign(socket,
collected_release_ids: collected_release_ids, collected_releases: collected_releases,
wishlisted_release_ids: wishlisted_release_ids, wishlisted_release_ids: wishlisted_release_ids,
artist_ids: artist_ids artist_ids: artist_ids
) )
@@ -117,6 +117,12 @@ defmodule MusicLibraryWeb.StatsLive.Index do
|> MapSet.new() |> MapSet.new()
end end
defp collected_record?(collected_releases, r_id) do
Enum.find_value(collected_releases, fn %{record_id: record_id, release_id: release_id} ->
if release_id == r_id, do: record_id
end)
end
# The Tailwind build step requires all needed classes to be explicitly referenced # The Tailwind build step requires all needed classes to be explicitly referenced
# in the source code, and not dynamically generated. This implies that one cannot # in the source code, and not dynamically generated. This implies that one cannot
# (for example) interpolate a number in a class name. # (for example) interpolate a number in a class name.
@@ -142,19 +142,21 @@
> >
{gettext("No MB ID")} {gettext("No MB ID")}
</span> </span>
<span <.link
:if={track.album.musicbrainz_id in @collected_release_ids} :if={record_id = collected_record?(@collected_releases, track.album.musicbrainz_id)}
class={[ navigate={~p"/collection/#{record_id}"}
>
<span class={[
"inline-flex items-center rounded-md", "inline-flex items-center rounded-md",
"px-2 py-1 text-xs font-medium", "px-2 py-1 text-xs font-medium",
"ring-1 ring-inset", "ring-1 ring-inset",
"bg-green-50 dark:bg-green-500/10", "bg-green-50 dark:bg-green-500/10",
"text-green-700 dark:text-green-400", "text-green-700 dark:text-green-400",
"ring-green-600/20 dark:ring-green-500/20" "ring-green-600/20 dark:ring-green-500/20"
]} ]}>
> {gettext("Collected")}
{gettext("Collected")} </span>
</span> </.link>
<span <span
:if={track.album.musicbrainz_id in @wishlisted_release_ids} :if={track.album.musicbrainz_id in @wishlisted_release_ids}
class={[ class={[
@@ -173,7 +175,7 @@
<div <div
:if={ :if={
track.album.musicbrainz_id !== "" and track.album.musicbrainz_id !== "" and
track.album.musicbrainz_id not in @collected_release_ids and !collected_record?(@collected_releases, track.album.musicbrainz_id) and
track.album.musicbrainz_id not in @wishlisted_release_ids track.album.musicbrainz_id not in @wishlisted_release_ids
} }
class="relative flex-none" class="relative flex-none"
+3 -3
View File
@@ -340,17 +340,17 @@ msgid "Scrobble activity"
msgstr "" msgstr ""
#: lib/music_library_web/live/record_live/import_component.ex:80 #: lib/music_library_web/live/record_live/import_component.ex:80
#: lib/music_library_web/live/stats_live/index.html.heex:189 #: lib/music_library_web/live/stats_live/index.html.heex:191
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Choose which format to import" msgid "Choose which format to import"
msgstr "" msgstr ""
#: lib/music_library_web/live/stats_live/index.html.heex:156 #: lib/music_library_web/live/stats_live/index.html.heex:157
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Collected" msgid "Collected"
msgstr "" msgstr ""
#: lib/music_library_web/live/stats_live/index.html.heex:169 #: lib/music_library_web/live/stats_live/index.html.heex:171
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Wishlisted" msgid "Wishlisted"
msgstr "" msgstr ""