defmodule MusicLibraryWeb.Components.Release do use MusicLibraryWeb, :live_component require Logger alias MusicBrainz.Release alias MusicLibrary.Records.TracklistPdf alias MusicLibrary.ScrobbleActivity alias MusicLibraryWeb.Duration alias MusicLibraryWeb.ErrorMessages alias Phoenix.LiveView.AsyncResult def open(id), do: Fluxon.open_dialog(id) @impl true def mount(socket) do {:ok, socket |> assign(:can_scrobble?, ScrobbleActivity.can_scrobble?()) |> assign(:release_with_tracks, AsyncResult.loading()) |> assign(:already_scrobbled, false) |> assign(:selected_tracks, MapSet.new())} end @impl true def update(%{record: record} = assigns, socket) do {:ok, socket |> assign(assigns) |> assign_async(:release_with_tracks, fn -> with {:ok, release} <- load_release_with_tracks(record.selected_release_id) do {:ok, %{release_with_tracks: release}} end end)} end def update(%{already_scrobbled: _already_scrobbled} = assigns, socket) do {:ok, assign(socket, assigns)} end @impl true def render(assigns) do ~H"""
{medium_duration(@medium)}
""" end defp medium_scrobble_label(format) do if format && String.contains?(format, "Vinyl") do gettext("Scrobble side") else gettext("Scrobble disc") end end attr :medium_number, :integer, required: true attr :tracks, :list, required: true attr :release_artists, :list, required: true attr :selected_tracks, :any, required: true attr :can_scrobble?, :boolean, required: true attr :myself, :any, required: true def track_list(assigns) do ~H"""