diff --git a/lib/music_library_web/components/release.ex b/lib/music_library_web/components/release.ex index dbf24a67..d79db378 100644 --- a/lib/music_library_web/components/release.ex +++ b/lib/music_library_web/components/release.ex @@ -2,6 +2,7 @@ defmodule MusicLibraryWeb.Components.Release do use MusicLibraryWeb, :live_component use Gettext, backend: MusicLibraryWeb.Gettext + alias MusicBrainz.Release alias MusicLibrary.ScrobbleActivity alias MusicLibraryWeb.Duration @@ -75,58 +76,15 @@ defmodule MusicLibraryWeb.Components.Release do {gettext("Error loading tracks")} -
-
1} - class="flex justify-between items-center gap-4" - > -

- {medium_title(medium)} -

- <.button - :if={@can_scrobble?} - size="sm" - disabled={@already_scrobbled} - phx-click="scrobble_medium" - phx-value-number={medium.number} - phx-target={@myself} - phx-disable-with={gettext("Scrobbling...")} - > - {gettext("Scrobble disc")} - -
- - <.separator /> -

- {medium_duration(medium)} -

-
+ <.medium + :for={medium <- release_with_tracks.media} + can_scrobble?={@can_scrobble?} + already_scrobbled={@already_scrobbled} + medium={medium} + release_artists={release_with_tracks.artists} + media_count={MusicBrainz.Release.media_count(release_with_tracks)} + myself={@myself} + /> @@ -134,6 +92,82 @@ defmodule MusicLibraryWeb.Components.Release do """ end + attr :medium, Release.Medium, required: true + attr :release_artists, :list, required: true + attr :media_count, :integer, required: true + attr :can_scrobble?, :boolean, required: true + attr :already_scrobbled, :boolean, required: true + attr :myself, :any, required: true + + def medium(assigns) do + ~H""" +
1} + class="flex justify-between items-center gap-4 space-y-4" + > +

+ {medium_title(@medium)} +

+ <.button + :if={@can_scrobble?} + size="sm" + disabled={@already_scrobbled} + phx-click="scrobble_medium" + phx-value-number={@medium.number} + phx-target={@myself} + phx-disable-with={gettext("Scrobbling...")} + > + {gettext("Scrobble disc")} + +
+ <.track_list + medium_number={@medium.number} + tracks={@medium.tracks} + release_artists={@release_artists} + /> + <.separator /> +

+ {medium_duration(@medium)} +

+ """ + end + + attr :medium_number, :integer, required: true + attr :tracks, :list, required: true + attr :release_artists, :list, required: true + + def track_list(assigns) do + ~H""" + + """ + end + @impl true def handle_event("scrobble_release", _params, socket) do release_with_tracks_async_result =