<.record_title_and_metadata record={@record} current_date={@current_date} />
<.record_external_links record={@record} />
<.record_genres record={@record} section={:wishlist} />
<.record_published_releases record={@record} />
- <.dl_row label={gettext("Wishlisted release")}>
-
-
- {gettext("No release selected")}
-
- <.release_summary
- :if={@record.selected_release_id}
- release={Records.Record.selected_release(@record)}
- />
-
-
+ <.record_show_selected_release_row
+ record={@record}
+ label={gettext("Wishlisted release")}
+ />
<.record_includes record={@record} />
<.record_sets_list record_sets={@record_sets} />
@@ -281,49 +128,17 @@ defmodule MusicLibraryWeb.WishlistLive.Show do
<.record_debug_sheet record={@record} embedding_text={@embedding_text} />
- <.sheet
- :if={@record.selected_release_id}
- id="release-with-tracks-sheet"
- placement="right"
- class="flex min-w-xs flex-col overflow-hidden p-0 sm:min-w-sm"
- >
- <.live_component
- id="release-with-tracks"
- sheet_id="release-with-tracks-sheet"
- module={MusicLibraryWeb.Components.Release}
- release_id={@record.selected_release_id}
- show_print?={false}
- timezone={@timezone}
- />
-
+ <.record_show_release_sheet record={@record} show_print?={false} timezone={@timezone} />
- <.live_component
- id="record-chat"
- sheet_id="record-chat-sheet"
- module={MusicLibraryWeb.Components.Chat}
- title={@record.title}
- entity={:record}
- musicbrainz_id={@record.musicbrainz_id}
- chat_module={MusicLibrary.Chats.RecordChat}
- chat_context={{@record, @embedding_text}}
- placeholder={gettext("Ask about this album...")}
- empty_prompt={gettext("Ask anything about this album")}
+ <.record_show_chat record={@record} embedding_text={@embedding_text} />
+
+ <.record_show_edit_modal
+ record={@record}
+ live_action={@live_action}
+ show_purchased_at={false}
+ close_path={~p"/wishlist/#{@record}"}
+ patch_path={~p"/wishlist/#{@record}"}
/>
-
- <.structured_modal
- :if={@live_action == :edit}
- id="record-modal"
- on_close={JS.patch(~p"/wishlist/#{@record}")}
- >
- <.live_component
- module={MusicLibraryWeb.Components.RecordForm}
- id={@record.id}
- action={@live_action}
- show_purchased_at={false}
- record={@record}
- patch={~p"/wishlist/#{@record}"}
- />
-
"""
end
@@ -341,40 +156,19 @@ defmodule MusicLibraryWeb.WishlistLive.Show do
@impl true
def handle_params(%{"id" => id}, _, socket) do
- RecordActions.manage_subscription(socket, id)
-
- record = Records.get_record!(id)
- online_store_templates = OnlineStoreTemplates.list_enabled_templates()
-
- record_sets = RecordSets.list_record_sets_for_record(record.id)
-
{:noreply,
socket
- |> assign(:page_title, page_title(socket.assigns.live_action, record))
- |> assign(:record, record)
- |> assign(:online_store_templates, online_store_templates)
- |> assign(:record_sets, record_sets)
- |> assign(:chat_count, Chats.count_chats(:record, record.musicbrainz_id))
- |> RecordActions.assign_embedding_text()}
+ |> RecordShow.assign_common_record(id, gettext("Wishlist"))
+ |> assign(:online_store_templates, OnlineStoreTemplates.list_enabled_templates())}
end
@impl true
def handle_event("delete", _params, socket) do
- {:ok, _} = Records.delete_record(socket.assigns.record)
-
- {:noreply, push_navigate(socket, to: ~p"/wishlist")}
+ RecordShow.delete_record(socket, ~p"/wishlist")
end
- def handle_event("refresh_musicbrainz_data", _params, socket) do
- RecordActions.refresh_musicbrainz_data(socket)
- end
-
- def handle_event("refresh_cover", _params, socket) do
- RecordActions.refresh_cover(socket)
- end
-
- def handle_event("populate_genres", _params, socket) do
- RecordActions.populate_genres(socket)
+ def handle_event(event, _params, socket) when event in @common_record_events do
+ RecordShow.handle_common_event(event, socket)
end
def handle_event("add-to-collection", _params, socket) do
@@ -393,100 +187,29 @@ defmodule MusicLibraryWeb.WishlistLive.Show do
end
end
- def handle_event("extract_colors", _params, socket) do
- RecordActions.extract_colors(socket)
- end
-
def handle_event("scrobble_release", _params, socket) do
- record = socket.assigns.record
-
- {:noreply,
- start_async(socket, :scrobble_release, fn ->
- with {:ok, release} <- MusicBrainz.get_release(record.selected_release_id) do
- release_with_tracks = MusicBrainz.Release.from_api_response(release)
-
- ScrobbleActivity.scrobble_release(release_with_tracks, :finished_at, DateTime.utc_now())
- end
- end)}
+ RecordShow.scrobble_release(socket)
end
@impl true
- def handle_async(:scrobble_release, {:ok, {:ok, _result}}, socket) do
- {:noreply, put_toast(socket, :info, gettext("Release scrobbled successfully"))}
- end
-
- def handle_async(:scrobble_release, {:ok, {:error, reason}}, socket) do
- {:noreply,
- put_toast(
- socket,
- :error,
- gettext("Error scrobbling release") <> ": " <> ErrorMessages.friendly_message(reason)
- )}
- end
-
- def handle_async(:scrobble_release, {:exit, reason}, socket) do
- Logger.error("Scrobble release failed: #{inspect(reason)}")
-
- {:noreply,
- put_toast(
- socket,
- :error,
- gettext("Error scrobbling release") <> ": " <> ErrorMessages.friendly_message(reason)
- )}
+ def handle_async(:scrobble_release, result, socket) do
+ RecordShow.handle_scrobble_release(result, socket)
end
@impl true
def handle_info({MusicLibraryWeb.Components.RecordForm, {:saved, record}}, socket) do
- {:noreply,
- socket
- |> assign(:record, record)
- |> RecordActions.assign_embedding_text()}
+ RecordShow.handle_saved_record(socket, record)
end
def handle_info({MusicLibraryWeb.Components.Chat, :chats_changed}, socket) do
- RecordActions.handle_chats_changed(socket)
+ RecordShow.handle_chats_changed(socket)
end
def handle_info({MusicLibraryWeb.Components.Release, {:loaded, _release}}, socket) do
- {:noreply, socket}
+ RecordShow.handle_release_loaded(socket)
end
- @impl true
def handle_info({:update, record}, socket) do
- cond do
- record.id != socket.assigns.record.id ->
- {:noreply, socket}
-
- socket.assigns.live_action == :edit ->
- {:noreply,
- socket
- |> put_toast(
- :warning,
- gettext(
- "Record was updated in the background. Your edits may be stale — save and re-open to see the latest data."
- )
- )}
-
- true ->
- {:noreply, RecordActions.handle_record_updated(socket, record)}
- end
+ RecordShow.handle_record_update(socket, record)
end
-
- defp page_title(action, record) do
- Enum.join(
- [
- Records.Record.artist_names(record),
- "-",
- record.title,
- "·",
- title_segment(action),
- "·",
- gettext("Wishlist")
- ],
- " "
- )
- end
-
- defp title_segment(:show), do: gettext("Details")
- defp title_segment(:edit), do: gettext("Edit")
end
diff --git a/lib/music_library_web/live_helpers/record_show.ex b/lib/music_library_web/live_helpers/record_show.ex
new file mode 100644
index 00000000..53df5e45
--- /dev/null
+++ b/lib/music_library_web/live_helpers/record_show.ex
@@ -0,0 +1,151 @@
+defmodule MusicLibraryWeb.LiveHelpers.RecordShow do
+ @moduledoc """
+ Shared show-page helpers for collection and wishlist record LiveViews.
+
+ The helpers keep common record loading, event handling, async scrobble
+ handling, and background-update behaviour in one place while allowing each
+ LiveView to compose page-specific assigns and UI around the shared flow.
+ """
+
+ require Logger
+
+ import LiveToast, only: [put_toast: 3]
+ import Phoenix.Component, only: [assign: 3]
+ import Phoenix.LiveView, only: [push_navigate: 2, start_async: 3]
+
+ use Gettext, backend: MusicLibraryWeb.Gettext
+
+ alias MusicLibrary.{Chats, Records, RecordSets, ScrobbleActivity}
+ alias MusicLibraryWeb.ErrorMessages
+ alias MusicLibraryWeb.LiveHelpers.RecordActions
+
+ def assign_common_record(socket, id, section_title) do
+ RecordActions.manage_subscription(socket, id)
+
+ record = Records.get_record!(id)
+ record_sets = RecordSets.list_record_sets_for_record(record.id)
+
+ socket
+ |> assign(:page_title, page_title(socket.assigns.live_action, record, section_title))
+ |> assign(:record, record)
+ |> assign(:record_sets, record_sets)
+ |> assign(:chat_count, Chats.count_chats(:record, record.musicbrainz_id))
+ |> RecordActions.assign_embedding_text()
+ end
+
+ def handle_common_event("refresh_musicbrainz_data", socket) do
+ RecordActions.refresh_musicbrainz_data(socket)
+ end
+
+ def handle_common_event("refresh_cover", socket) do
+ RecordActions.refresh_cover(socket)
+ end
+
+ def handle_common_event("populate_genres", socket) do
+ RecordActions.populate_genres(socket)
+ end
+
+ def handle_common_event("extract_colors", socket) do
+ RecordActions.extract_colors(socket)
+ end
+
+ def delete_record(socket, path) do
+ {:ok, _} = Records.delete_record(socket.assigns.record)
+
+ {:noreply, push_navigate(socket, to: path)}
+ end
+
+ def scrobble_release(socket) do
+ record = socket.assigns.record
+
+ {:noreply,
+ start_async(socket, :scrobble_release, fn ->
+ with {:ok, release} <- MusicBrainz.get_release(record.selected_release_id) do
+ release_with_tracks = MusicBrainz.Release.from_api_response(release)
+
+ ScrobbleActivity.scrobble_release(release_with_tracks, :finished_at, DateTime.utc_now())
+ end
+ end)}
+ end
+
+ def handle_scrobble_release({:ok, {:ok, _result}}, socket) do
+ {:noreply, put_toast(socket, :info, gettext("Release scrobbled successfully"))}
+ end
+
+ def handle_scrobble_release({:ok, {:error, reason}}, socket) do
+ {:noreply,
+ put_toast(
+ socket,
+ :error,
+ gettext("Error scrobbling release") <> ": " <> ErrorMessages.friendly_message(reason)
+ )}
+ end
+
+ def handle_scrobble_release({:exit, reason}, socket) do
+ Logger.error("Scrobble release failed: #{inspect(reason)}")
+
+ {:noreply,
+ put_toast(
+ socket,
+ :error,
+ gettext("Error scrobbling release") <> ": " <> ErrorMessages.friendly_message(reason)
+ )}
+ end
+
+ def handle_saved_record(socket, record, after_assign \\ &Function.identity/1) do
+ {:noreply,
+ socket
+ |> assign(:record, record)
+ |> after_assign.()
+ |> RecordActions.assign_embedding_text()}
+ end
+
+ def handle_chats_changed(socket) do
+ RecordActions.handle_chats_changed(socket)
+ end
+
+ def handle_release_loaded(socket) do
+ {:noreply, socket}
+ end
+
+ def handle_record_update(socket, record, after_update \\ &Function.identity/1) do
+ cond do
+ record.id != socket.assigns.record.id ->
+ {:noreply, socket}
+
+ socket.assigns.live_action == :edit ->
+ {:noreply,
+ socket
+ |> put_toast(
+ :warning,
+ gettext(
+ "Record was updated in the background. Your edits may be stale — save and re-open to see the latest data."
+ )
+ )}
+
+ true ->
+ {:noreply,
+ socket
+ |> RecordActions.handle_record_updated(record)
+ |> after_update.()}
+ end
+ end
+
+ defp page_title(action, record, section_title) do
+ Enum.join(
+ [
+ Records.Record.artist_names(record),
+ "-",
+ record.title,
+ "·",
+ title_segment(action),
+ "·",
+ section_title
+ ],
+ " "
+ )
+ end
+
+ defp title_segment(:show), do: gettext("Details")
+ defp title_segment(:edit), do: gettext("Edit")
+end
diff --git a/priv/gettext/default.pot b/priv/gettext/default.pot
index 7b09ebbc..56e8762a 100644
--- a/priv/gettext/default.pot
+++ b/priv/gettext/default.pot
@@ -12,13 +12,11 @@ msgid ""
msgstr ""
#: lib/music_library_web/components/record_components.ex
-#: lib/music_library_web/live/collection_live/show.ex
#: lib/music_library_web/live/online_store_template_live/index.ex
#: lib/music_library_web/live/record_set_live/index.ex
#: lib/music_library_web/live/record_set_live/show.ex
#: lib/music_library_web/live/scrobble_rules_live/index.ex
#: lib/music_library_web/live/scrobbled_tracks_live/index.ex
-#: lib/music_library_web/live/wishlist_live/show.ex
#, elixir-autogen, elixir-format
msgid "Are you sure?"
msgstr ""
@@ -38,13 +36,11 @@ msgid "Cover art"
msgstr ""
#: lib/music_library_web/components/record_components.ex
-#: lib/music_library_web/live/collection_live/show.ex
#: lib/music_library_web/live/online_store_template_live/index.ex
#: lib/music_library_web/live/record_set_live/index.ex
#: lib/music_library_web/live/record_set_live/show.ex
#: lib/music_library_web/live/scrobble_rules_live/index.ex
#: lib/music_library_web/live/scrobbled_tracks_live/index.ex
-#: lib/music_library_web/live/wishlist_live/show.ex
#, elixir-autogen, elixir-format
msgid "Delete"
msgstr ""
@@ -52,14 +48,13 @@ msgstr ""
#: lib/music_library_web/components/notes.ex
#: lib/music_library_web/components/record_components.ex
#: lib/music_library_web/live/artist_live/show.ex
-#: lib/music_library_web/live/collection_live/show.ex
#: lib/music_library_web/live/online_store_template_live/index.ex
#: lib/music_library_web/live/record_set_live/index.ex
#: lib/music_library_web/live/record_set_live/show.ex
#: lib/music_library_web/live/scrobble_rules_live/index.ex
#: lib/music_library_web/live/scrobbled_tracks_live/index.ex
-#: lib/music_library_web/live/wishlist_live/show.ex
#: lib/music_library_web/live_helpers/index_actions.ex
+#: lib/music_library_web/live_helpers/record_show.ex
#, elixir-autogen, elixir-format
msgid "Edit"
msgstr ""
@@ -280,8 +275,7 @@ msgid "No MB ID"
msgstr ""
#: lib/music_library_web/live/artist_live/show.ex
-#: lib/music_library_web/live/collection_live/show.ex
-#: lib/music_library_web/live/wishlist_live/show.ex
+#: lib/music_library_web/live_helpers/record_show.ex
#, elixir-autogen, elixir-format
msgid "Details"
msgstr ""
@@ -296,20 +290,17 @@ msgstr ""
msgid "Loading biography"
msgstr ""
-#: lib/music_library_web/live/collection_live/show.ex
-#: lib/music_library_web/live/wishlist_live/show.ex
+#: lib/music_library_web/components/record_components.ex
#, elixir-autogen, elixir-format
msgid "Populate genres"
msgstr ""
-#: lib/music_library_web/live/collection_live/show.ex
-#: lib/music_library_web/live/wishlist_live/show.ex
+#: lib/music_library_web/components/record_components.ex
#, elixir-autogen, elixir-format
msgid "Refresh MB data"
msgstr ""
-#: lib/music_library_web/live/collection_live/show.ex
-#: lib/music_library_web/live/wishlist_live/show.ex
+#: lib/music_library_web/components/record_components.ex
#, elixir-autogen, elixir-format
msgid "Refresh cover"
msgstr ""
@@ -601,8 +592,7 @@ msgstr ""
msgid "Collected release"
msgstr ""
-#: lib/music_library_web/live/collection_live/show.ex
-#: lib/music_library_web/live/wishlist_live/show.ex
+#: lib/music_library_web/components/record_components.ex
#, elixir-autogen, elixir-format
msgid "No release selected"
msgstr ""
@@ -622,8 +612,7 @@ msgstr ""
msgid "Loading release with tracks"
msgstr ""
-#: lib/music_library_web/live/collection_live/show.ex
-#: lib/music_library_web/live/wishlist_live/show.ex
+#: lib/music_library_web/components/record_components.ex
#, elixir-autogen, elixir-format
msgid "Show Tracks"
msgstr ""
@@ -639,15 +628,13 @@ msgid "Successfully connected your Last.fm account"
msgstr ""
#: lib/music_library_web/components/release.ex
-#: lib/music_library_web/live/collection_live/show.ex
-#: lib/music_library_web/live/wishlist_live/show.ex
+#: lib/music_library_web/live_helpers/record_show.ex
#, elixir-autogen, elixir-format
msgid "Error scrobbling release"
msgstr ""
#: lib/music_library_web/components/release.ex
-#: lib/music_library_web/live/collection_live/show.ex
-#: lib/music_library_web/live/wishlist_live/show.ex
+#: lib/music_library_web/live_helpers/record_show.ex
#, elixir-autogen, elixir-format
msgid "Release scrobbled successfully"
msgstr ""
@@ -662,9 +649,8 @@ msgstr ""
msgid "Scrobbling..."
msgstr ""
+#: lib/music_library_web/components/record_components.ex
#: lib/music_library_web/components/release.ex
-#: lib/music_library_web/live/collection_live/show.ex
-#: lib/music_library_web/live/wishlist_live/show.ex
#, elixir-autogen, elixir-format
msgid "Scrobble release"
msgstr ""
@@ -795,13 +781,11 @@ msgstr ""
#: lib/music_library_web/components/layouts/app.html.heex
#: lib/music_library_web/components/record_components.ex
#: lib/music_library_web/live/artist_live/show.ex
-#: lib/music_library_web/live/collection_live/show.ex
#: lib/music_library_web/live/online_store_template_live/index.ex
#: lib/music_library_web/live/record_set_live/index.ex
#: lib/music_library_web/live/record_set_live/show.ex
#: lib/music_library_web/live/scrobble_rules_live/index.ex
#: lib/music_library_web/live/scrobbled_tracks_live/index.ex
-#: lib/music_library_web/live/wishlist_live/show.ex
#, elixir-autogen, elixir-format
msgid "Actions"
msgstr ""
@@ -1013,7 +997,7 @@ msgstr ""
msgid "to open this search"
msgstr ""
-#: lib/music_library_web/live/collection_live/show.ex
+#: lib/music_library_web/components/record_components.ex
#, elixir-autogen, elixir-format
msgid "Copy record selected release ID to clipboard"
msgstr ""
@@ -1736,14 +1720,12 @@ msgstr ""
msgid "Based on genres, artists, and musical style"
msgstr ""
-#: lib/music_library_web/live/collection_live/show.ex
-#: lib/music_library_web/live/wishlist_live/show.ex
+#: lib/music_library_web/components/record_components.ex
#, elixir-autogen, elixir-format
msgid "Ask about this album..."
msgstr ""
-#: lib/music_library_web/live/collection_live/show.ex
-#: lib/music_library_web/live/wishlist_live/show.ex
+#: lib/music_library_web/components/record_components.ex
#, elixir-autogen, elixir-format
msgid "Ask anything about this album"
msgstr ""
@@ -1753,8 +1735,7 @@ msgstr ""
msgid "Chat about %{title}"
msgstr ""
-#: lib/music_library_web/live/collection_live/show.ex
-#: lib/music_library_web/live/wishlist_live/show.ex
+#: lib/music_library_web/components/record_components.ex
#, elixir-autogen, elixir-format
msgid "Chat about album"
msgstr ""
@@ -1822,9 +1803,8 @@ msgid "Copy MB ID"
msgstr ""
#: lib/music_library_web/components/core_components.ex
+#: lib/music_library_web/components/record_components.ex
#: lib/music_library_web/live/artist_live/show.ex
-#: lib/music_library_web/live/collection_live/show.ex
-#: lib/music_library_web/live/wishlist_live/show.ex
#, elixir-autogen, elixir-format
msgid "Debug data"
msgstr ""
@@ -1910,8 +1890,7 @@ msgstr ""
msgid "Error extracting colors"
msgstr ""
-#: lib/music_library_web/live/collection_live/show.ex
-#: lib/music_library_web/live/wishlist_live/show.ex
+#: lib/music_library_web/components/record_components.ex
#, elixir-autogen, elixir-format
msgid "Extract colors"
msgstr ""
@@ -2561,8 +2540,7 @@ msgstr ""
msgid "ISO format"
msgstr ""
-#: lib/music_library_web/live/collection_live/show.ex
-#: lib/music_library_web/live/wishlist_live/show.ex
+#: lib/music_library_web/live_helpers/record_show.ex
#, elixir-autogen, elixir-format
msgid "Record was updated in the background. Your edits may be stale — save and re-open to see the latest data."
msgstr ""
diff --git a/priv/gettext/en/LC_MESSAGES/default.po b/priv/gettext/en/LC_MESSAGES/default.po
index f622bc6f..9db03153 100644
--- a/priv/gettext/en/LC_MESSAGES/default.po
+++ b/priv/gettext/en/LC_MESSAGES/default.po
@@ -12,13 +12,11 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: lib/music_library_web/components/record_components.ex
-#: lib/music_library_web/live/collection_live/show.ex
#: lib/music_library_web/live/online_store_template_live/index.ex
#: lib/music_library_web/live/record_set_live/index.ex
#: lib/music_library_web/live/record_set_live/show.ex
#: lib/music_library_web/live/scrobble_rules_live/index.ex
#: lib/music_library_web/live/scrobbled_tracks_live/index.ex
-#: lib/music_library_web/live/wishlist_live/show.ex
#, elixir-autogen, elixir-format
msgid "Are you sure?"
msgstr ""
@@ -38,13 +36,11 @@ msgid "Cover art"
msgstr ""
#: lib/music_library_web/components/record_components.ex
-#: lib/music_library_web/live/collection_live/show.ex
#: lib/music_library_web/live/online_store_template_live/index.ex
#: lib/music_library_web/live/record_set_live/index.ex
#: lib/music_library_web/live/record_set_live/show.ex
#: lib/music_library_web/live/scrobble_rules_live/index.ex
#: lib/music_library_web/live/scrobbled_tracks_live/index.ex
-#: lib/music_library_web/live/wishlist_live/show.ex
#, elixir-autogen, elixir-format
msgid "Delete"
msgstr ""
@@ -52,14 +48,13 @@ msgstr ""
#: lib/music_library_web/components/notes.ex
#: lib/music_library_web/components/record_components.ex
#: lib/music_library_web/live/artist_live/show.ex
-#: lib/music_library_web/live/collection_live/show.ex
#: lib/music_library_web/live/online_store_template_live/index.ex
#: lib/music_library_web/live/record_set_live/index.ex
#: lib/music_library_web/live/record_set_live/show.ex
#: lib/music_library_web/live/scrobble_rules_live/index.ex
#: lib/music_library_web/live/scrobbled_tracks_live/index.ex
-#: lib/music_library_web/live/wishlist_live/show.ex
#: lib/music_library_web/live_helpers/index_actions.ex
+#: lib/music_library_web/live_helpers/record_show.ex
#, elixir-autogen, elixir-format
msgid "Edit"
msgstr ""
@@ -280,8 +275,7 @@ msgid "No MB ID"
msgstr ""
#: lib/music_library_web/live/artist_live/show.ex
-#: lib/music_library_web/live/collection_live/show.ex
-#: lib/music_library_web/live/wishlist_live/show.ex
+#: lib/music_library_web/live_helpers/record_show.ex
#, elixir-autogen, elixir-format
msgid "Details"
msgstr ""
@@ -296,20 +290,17 @@ msgstr ""
msgid "Loading biography"
msgstr ""
-#: lib/music_library_web/live/collection_live/show.ex
-#: lib/music_library_web/live/wishlist_live/show.ex
+#: lib/music_library_web/components/record_components.ex
#, elixir-autogen, elixir-format
msgid "Populate genres"
msgstr ""
-#: lib/music_library_web/live/collection_live/show.ex
-#: lib/music_library_web/live/wishlist_live/show.ex
+#: lib/music_library_web/components/record_components.ex
#, elixir-autogen, elixir-format
msgid "Refresh MB data"
msgstr ""
-#: lib/music_library_web/live/collection_live/show.ex
-#: lib/music_library_web/live/wishlist_live/show.ex
+#: lib/music_library_web/components/record_components.ex
#, elixir-autogen, elixir-format
msgid "Refresh cover"
msgstr ""
@@ -601,8 +592,7 @@ msgstr ""
msgid "Collected release"
msgstr ""
-#: lib/music_library_web/live/collection_live/show.ex
-#: lib/music_library_web/live/wishlist_live/show.ex
+#: lib/music_library_web/components/record_components.ex
#, elixir-autogen, elixir-format
msgid "No release selected"
msgstr ""
@@ -622,8 +612,7 @@ msgstr ""
msgid "Loading release with tracks"
msgstr ""
-#: lib/music_library_web/live/collection_live/show.ex
-#: lib/music_library_web/live/wishlist_live/show.ex
+#: lib/music_library_web/components/record_components.ex
#, elixir-autogen, elixir-format
msgid "Show Tracks"
msgstr ""
@@ -639,15 +628,13 @@ msgid "Successfully connected your Last.fm account"
msgstr ""
#: lib/music_library_web/components/release.ex
-#: lib/music_library_web/live/collection_live/show.ex
-#: lib/music_library_web/live/wishlist_live/show.ex
+#: lib/music_library_web/live_helpers/record_show.ex
#, elixir-autogen, elixir-format
msgid "Error scrobbling release"
msgstr ""
#: lib/music_library_web/components/release.ex
-#: lib/music_library_web/live/collection_live/show.ex
-#: lib/music_library_web/live/wishlist_live/show.ex
+#: lib/music_library_web/live_helpers/record_show.ex
#, elixir-autogen, elixir-format
msgid "Release scrobbled successfully"
msgstr ""
@@ -662,9 +649,8 @@ msgstr ""
msgid "Scrobbling..."
msgstr ""
+#: lib/music_library_web/components/record_components.ex
#: lib/music_library_web/components/release.ex
-#: lib/music_library_web/live/collection_live/show.ex
-#: lib/music_library_web/live/wishlist_live/show.ex
#, elixir-autogen, elixir-format
msgid "Scrobble release"
msgstr ""
@@ -795,13 +781,11 @@ msgstr ""
#: lib/music_library_web/components/layouts/app.html.heex
#: lib/music_library_web/components/record_components.ex
#: lib/music_library_web/live/artist_live/show.ex
-#: lib/music_library_web/live/collection_live/show.ex
#: lib/music_library_web/live/online_store_template_live/index.ex
#: lib/music_library_web/live/record_set_live/index.ex
#: lib/music_library_web/live/record_set_live/show.ex
#: lib/music_library_web/live/scrobble_rules_live/index.ex
#: lib/music_library_web/live/scrobbled_tracks_live/index.ex
-#: lib/music_library_web/live/wishlist_live/show.ex
#, elixir-autogen, elixir-format
msgid "Actions"
msgstr ""
@@ -1013,7 +997,7 @@ msgstr ""
msgid "to open this search"
msgstr ""
-#: lib/music_library_web/live/collection_live/show.ex
+#: lib/music_library_web/components/record_components.ex
#, elixir-autogen, elixir-format
msgid "Copy record selected release ID to clipboard"
msgstr ""
@@ -1736,14 +1720,12 @@ msgstr ""
msgid "Based on genres, artists, and musical style"
msgstr ""
-#: lib/music_library_web/live/collection_live/show.ex
-#: lib/music_library_web/live/wishlist_live/show.ex
+#: lib/music_library_web/components/record_components.ex
#, elixir-autogen, elixir-format
msgid "Ask about this album..."
msgstr ""
-#: lib/music_library_web/live/collection_live/show.ex
-#: lib/music_library_web/live/wishlist_live/show.ex
+#: lib/music_library_web/components/record_components.ex
#, elixir-autogen, elixir-format
msgid "Ask anything about this album"
msgstr ""
@@ -1753,8 +1735,7 @@ msgstr ""
msgid "Chat about %{title}"
msgstr ""
-#: lib/music_library_web/live/collection_live/show.ex
-#: lib/music_library_web/live/wishlist_live/show.ex
+#: lib/music_library_web/components/record_components.ex
#, elixir-autogen, elixir-format
msgid "Chat about album"
msgstr ""
@@ -1822,9 +1803,8 @@ msgid "Copy MB ID"
msgstr ""
#: lib/music_library_web/components/core_components.ex
+#: lib/music_library_web/components/record_components.ex
#: lib/music_library_web/live/artist_live/show.ex
-#: lib/music_library_web/live/collection_live/show.ex
-#: lib/music_library_web/live/wishlist_live/show.ex
#, elixir-autogen, elixir-format
msgid "Debug data"
msgstr ""
@@ -1910,8 +1890,7 @@ msgstr ""
msgid "Error extracting colors"
msgstr ""
-#: lib/music_library_web/live/collection_live/show.ex
-#: lib/music_library_web/live/wishlist_live/show.ex
+#: lib/music_library_web/components/record_components.ex
#, elixir-autogen, elixir-format
msgid "Extract colors"
msgstr ""
@@ -2561,8 +2540,7 @@ msgstr ""
msgid "ISO format"
msgstr ""
-#: lib/music_library_web/live/collection_live/show.ex
-#: lib/music_library_web/live/wishlist_live/show.ex
+#: lib/music_library_web/live_helpers/record_show.ex
#, elixir-autogen, elixir-format
msgid "Record was updated in the background. Your edits may be stale — save and re-open to see the latest data."
msgstr ""