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:
@@ -20,10 +20,7 @@ defmodule MusicLibraryWeb.StatsLive.Index do
|
|||||||
|
|
||||||
recent_tracks = LastFm.Feed.all()
|
recent_tracks = LastFm.Feed.all()
|
||||||
|
|
||||||
release_ids =
|
release_ids = release_ids(recent_tracks)
|
||||||
recent_tracks
|
|
||||||
|> Enum.map(fn t -> t.album.musicbrainz_id end)
|
|
||||||
|> Enum.uniq()
|
|
||||||
|
|
||||||
collected_release_ids = Collection.collected_release_ids(release_ids)
|
collected_release_ids = Collection.collected_release_ids(release_ids)
|
||||||
wishlisted_release_ids = Wishlist.wishlisted_release_ids(release_ids)
|
wishlisted_release_ids = Wishlist.wishlisted_release_ids(release_ids)
|
||||||
@@ -83,10 +80,7 @@ defmodule MusicLibraryWeb.StatsLive.Index do
|
|||||||
end
|
end
|
||||||
|
|
||||||
def handle_info(%{tracks: recent_tracks}, socket) do
|
def handle_info(%{tracks: recent_tracks}, socket) do
|
||||||
release_ids =
|
release_ids = release_ids(recent_tracks)
|
||||||
recent_tracks
|
|
||||||
|> Enum.map(fn t -> t.album.musicbrainz_id end)
|
|
||||||
|> Enum.uniq()
|
|
||||||
|
|
||||||
collected_release_ids = Collection.collected_release_ids(release_ids)
|
collected_release_ids = Collection.collected_release_ids(release_ids)
|
||||||
wishlisted_release_ids = Wishlist.wishlisted_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)}
|
|> stream(:recent_tracks, recent_tracks, reset: true)}
|
||||||
end
|
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
|
# 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.
|
||||||
|
|||||||
@@ -114,6 +114,19 @@
|
|||||||
</div>
|
</div>
|
||||||
</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
|
<span
|
||||||
:if={track.album.musicbrainz_id in @collected_release_ids}
|
:if={track.album.musicbrainz_id in @collected_release_ids}
|
||||||
class={[
|
class={[
|
||||||
@@ -143,7 +156,8 @@
|
|||||||
|
|
||||||
<div
|
<div
|
||||||
:if={
|
: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
|
track.album.musicbrainz_id not in @wishlisted_release_ids
|
||||||
}
|
}
|
||||||
class="relative flex-none"
|
class="relative flex-none"
|
||||||
|
|||||||
@@ -82,8 +82,8 @@ msgid "Edit"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: lib/music_library_web/live/collection_live/index.ex:121
|
#: lib/music_library_web/live/collection_live/index.ex:121
|
||||||
#: lib/music_library_web/live/stats_live/index.ex:70
|
#: lib/music_library_web/live/stats_live/index.ex:67
|
||||||
#: lib/music_library_web/live/stats_live/index.ex:76
|
#: lib/music_library_web/live/stats_live/index.ex:73
|
||||||
#: lib/music_library_web/live/wishlist_live/index.ex:117
|
#: lib/music_library_web/live/wishlist_live/index.ex:117
|
||||||
#: lib/music_library_web/live/wishlist_live/index.ex:124
|
#: lib/music_library_web/live/wishlist_live/index.ex:124
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
@@ -210,7 +210,7 @@ msgid "Purchased on"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: lib/music_library_web/live/collection_live/index.ex:112
|
#: lib/music_library_web/live/collection_live/index.ex:112
|
||||||
#: lib/music_library_web/live/stats_live/index.ex:62
|
#: lib/music_library_web/live/stats_live/index.ex:59
|
||||||
#: lib/music_library_web/live/wishlist_live/index.ex:109
|
#: lib/music_library_web/live/wishlist_live/index.ex:109
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Record imported successfully"
|
msgid "Record imported successfully"
|
||||||
@@ -273,7 +273,7 @@ msgid "Something went wrong!"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: lib/music_library_web/components/layouts/app.html.heex:7
|
#: lib/music_library_web/components/layouts/app.html.heex:7
|
||||||
#: lib/music_library_web/live/stats_live/index.ex:42
|
#: lib/music_library_web/live/stats_live/index.ex:39
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Stats"
|
msgid "Stats"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -368,17 +368,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:159
|
#: lib/music_library_web/live/stats_live/index.html.heex:173
|
||||||
#, 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:128
|
#: lib/music_library_web/live/stats_live/index.html.heex:141
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Collected"
|
msgid "Collected"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: lib/music_library_web/live/stats_live/index.html.heex:141
|
#: lib/music_library_web/live/stats_live/index.html.heex:154
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Wishlisted"
|
msgid "Wishlisted"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -449,3 +449,8 @@ msgstr ""
|
|||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Error refreshing cover"
|
msgid "Error refreshing cover"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/music_library_web/live/stats_live/index.html.heex:128
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "No MusicBrainz ID"
|
||||||
|
msgstr ""
|
||||||
|
|||||||
@@ -127,10 +127,28 @@ defmodule MusicLibraryWeb.StatsLive.IndexTest do
|
|||||||
scrobbled_at_label: "20 Nov 2024, 11:54"
|
scrobbled_at_label: "20 Nov 2024, 11:54"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
in_murmuration_track = %LastFm.Track{
|
||||||
|
musicbrainz_id: "",
|
||||||
|
title: "Wait For Me",
|
||||||
|
artist: %LastFm.Artist{
|
||||||
|
musicbrainz_id: "298c6d13-4757-437d-a3a6-07d0b3255e5b",
|
||||||
|
name: "Von Hertzen Brothers"
|
||||||
|
},
|
||||||
|
album: %LastFm.Album{
|
||||||
|
musicbrainz_id: "",
|
||||||
|
title: "In Murmuration"
|
||||||
|
},
|
||||||
|
cover_url:
|
||||||
|
"https://lastfm.freetls.fastly.net/i/u/64s/f4923850113a5d365b1fd2d04cb4c1c3.jpg",
|
||||||
|
scrobbled_at_uts: 1_732_399_832,
|
||||||
|
scrobbled_at_label: "23 Nov 2024, 22:10"
|
||||||
|
}
|
||||||
|
|
||||||
LastFm.Feed.update([
|
LastFm.Feed.update([
|
||||||
machinarium_soundtrack_track,
|
machinarium_soundtrack_track,
|
||||||
the_last_flight_track,
|
the_last_flight_track,
|
||||||
the_mystery_of_time_track
|
the_mystery_of_time_track,
|
||||||
|
in_murmuration_track
|
||||||
])
|
])
|
||||||
|
|
||||||
# We add one album to the wishlist, and one to the collection.
|
# We add one album to the wishlist, and one to the collection.
|
||||||
@@ -164,6 +182,12 @@ defmodule MusicLibraryWeb.StatsLive.IndexTest do
|
|||||||
"#track-#{the_mystery_of_time_track.scrobbled_at_uts}",
|
"#track-#{the_mystery_of_time_track.scrobbled_at_uts}",
|
||||||
"Choose which format to import"
|
"Choose which format to import"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
assert has_element?(
|
||||||
|
stats_live,
|
||||||
|
"#track-#{in_murmuration_track.scrobbled_at_uts}",
|
||||||
|
"No MusicBrainz ID"
|
||||||
|
)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user