Add badge for tracks whose albums cannot be imported

Includes a small optimization that removes "" release IDs from the list
of IDs checked against releases in the database.
This commit is contained in:
Claudio Ortolina
2024-11-23 22:57:25 +00:00
parent f157fbadee
commit 93b347ad8d
4 changed files with 61 additions and 17 deletions
@@ -20,10 +20,7 @@ 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()
release_ids = release_ids(recent_tracks)
collected_release_ids = Collection.collected_release_ids(release_ids)
wishlisted_release_ids = Wishlist.wishlisted_release_ids(release_ids)
@@ -83,10 +80,7 @@ defmodule MusicLibraryWeb.StatsLive.Index do
end
def handle_info(%{tracks: recent_tracks}, socket) do
release_ids =
recent_tracks
|> Enum.map(fn t -> t.album.musicbrainz_id end)
|> Enum.uniq()
release_ids = release_ids(recent_tracks)
collected_release_ids = Collection.collected_release_ids(release_ids)
wishlisted_release_ids = Wishlist.wishlisted_release_ids(release_ids)
@@ -100,6 +94,13 @@ defmodule MusicLibraryWeb.StatsLive.Index do
|> stream(:recent_tracks, recent_tracks, reset: true)}
end
defp release_ids(recent_tracks) do
recent_tracks
|> Enum.map(fn t -> t.album.musicbrainz_id end)
|> Enum.uniq()
|> Enum.reject(fn musicbrainz_id -> musicbrainz_id == "" end)
end
# 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
# (for example) interpolate a number in a class name.
@@ -114,6 +114,19 @@
</div>
</div>
<span
:if={track.album.musicbrainz_id == ""}
class={[
"inline-flex items-center rounded-md",
"px-2 py-1 text-xs font-medium",
"ring-1 ring-inset",
"bg-zinc-50 dark:bg-zinc-500/10",
"text-zinc-700 dark:text-zinc-400",
"ring-zinc-600/20 dark:ring-zinc-500/20"
]}
>
<%= gettext("No MusicBrainz ID") %>
</span>
<span
:if={track.album.musicbrainz_id in @collected_release_ids}
class={[
@@ -143,7 +156,8 @@
<div
:if={
track.album.musicbrainz_id not in @collected_release_ids and
track.album.musicbrainz_id !== "" and
track.album.musicbrainz_id not in @collected_release_ids and
track.album.musicbrainz_id not in @wishlisted_release_ids
}
class="relative flex-none"