@@ -23,6 +23,7 @@ defmodule MusicLibraryWeb.CollectionLive.Show do
|
|||||||
alias MusicLibrary.{Chats, ListeningStats, Records, RecordSets, ScrobbleActivity}
|
alias MusicLibrary.{Chats, ListeningStats, Records, RecordSets, ScrobbleActivity}
|
||||||
alias MusicLibrary.Records.Similarity
|
alias MusicLibrary.Records.Similarity
|
||||||
alias MusicLibraryWeb.ErrorMessages
|
alias MusicLibraryWeb.ErrorMessages
|
||||||
|
alias MusicLibraryWeb.LiveHelpers.RecordActions
|
||||||
alias Phoenix.LiveView.JS
|
alias Phoenix.LiveView.JS
|
||||||
|
|
||||||
alias MusicBrainz
|
alias MusicBrainz
|
||||||
@@ -356,7 +357,7 @@ defmodule MusicLibraryWeb.CollectionLive.Show do
|
|||||||
|> assign(:play_count, play_count)
|
|> assign(:play_count, play_count)
|
||||||
|> assign(:record_sets, record_sets)
|
|> assign(:record_sets, record_sets)
|
||||||
|> assign(:chat_count, Chats.count_chats(:record, record.musicbrainz_id))
|
|> assign(:chat_count, Chats.count_chats(:record, record.musicbrainz_id))
|
||||||
|> assign_embedding_text()
|
|> RecordActions.assign_embedding_text()
|
||||||
|> assign_similar_records()}
|
|> assign_similar_records()}
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -368,83 +369,19 @@ defmodule MusicLibraryWeb.CollectionLive.Show do
|
|||||||
end
|
end
|
||||||
|
|
||||||
def handle_event("refresh_musicbrainz_data", _params, socket) do
|
def handle_event("refresh_musicbrainz_data", _params, socket) do
|
||||||
record = socket.assigns.record
|
RecordActions.refresh_musicbrainz_data(socket)
|
||||||
|
|
||||||
case Records.refresh_musicbrainz_data(record) do
|
|
||||||
{:ok, updated_record} ->
|
|
||||||
{:noreply,
|
|
||||||
socket
|
|
||||||
|> put_toast(:info, gettext("MusicBrainz data refreshed successfully"))
|
|
||||||
|> assign(:record, updated_record)}
|
|
||||||
|
|
||||||
{:error, reason} ->
|
|
||||||
{:noreply,
|
|
||||||
socket
|
|
||||||
|> put_toast(
|
|
||||||
:error,
|
|
||||||
gettext("Error refreshing MusicBrainz data") <>
|
|
||||||
": " <> ErrorMessages.friendly_message(reason)
|
|
||||||
)}
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def handle_event("populate_genres", _params, socket) do
|
def handle_event("populate_genres", _params, socket) do
|
||||||
record = socket.assigns.record
|
RecordActions.populate_genres(socket)
|
||||||
|
|
||||||
case Records.populate_genres_async(record) do
|
|
||||||
{:ok, _worker} ->
|
|
||||||
{:noreply,
|
|
||||||
socket
|
|
||||||
|> put_toast(:info, gettext("In progress - record will update automatically"))}
|
|
||||||
|
|
||||||
{:error, reason} ->
|
|
||||||
{:noreply,
|
|
||||||
socket
|
|
||||||
|> put_toast(
|
|
||||||
:error,
|
|
||||||
gettext("Error") <> ": " <> ErrorMessages.friendly_message(reason)
|
|
||||||
)}
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def handle_event("refresh_cover", _params, socket) do
|
def handle_event("refresh_cover", _params, socket) do
|
||||||
record = socket.assigns.record
|
RecordActions.refresh_cover(socket)
|
||||||
|
|
||||||
case Records.refresh_cover(record) do
|
|
||||||
{:ok, record} ->
|
|
||||||
{:noreply,
|
|
||||||
socket
|
|
||||||
|> assign(:record, record)
|
|
||||||
|> put_toast(:info, gettext("Cover refreshed successfully"))}
|
|
||||||
|
|
||||||
{:error, reason} ->
|
|
||||||
{:noreply,
|
|
||||||
socket
|
|
||||||
|> put_toast(
|
|
||||||
:error,
|
|
||||||
gettext("Error refreshing cover") <> ": " <> ErrorMessages.friendly_message(reason)
|
|
||||||
)}
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def handle_event("extract_colors", _params, socket) do
|
def handle_event("extract_colors", _params, socket) do
|
||||||
record = socket.assigns.record
|
RecordActions.extract_colors(socket)
|
||||||
|
|
||||||
case Records.extract_colors(record) do
|
|
||||||
{:ok, updated_record} ->
|
|
||||||
{:noreply,
|
|
||||||
socket
|
|
||||||
|> assign(:record, updated_record)
|
|
||||||
|> put_toast(:info, gettext("Colors extracted"))}
|
|
||||||
|
|
||||||
{:error, reason} ->
|
|
||||||
{:noreply,
|
|
||||||
socket
|
|
||||||
|> put_toast(
|
|
||||||
:error,
|
|
||||||
gettext("Error extracting colors") <> ": " <> ErrorMessages.friendly_message(reason)
|
|
||||||
)}
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def handle_event("regenerate_embeddings", _params, socket) do
|
def handle_event("regenerate_embeddings", _params, socket) do
|
||||||
@@ -510,22 +447,19 @@ defmodule MusicLibraryWeb.CollectionLive.Show do
|
|||||||
socket
|
socket
|
||||||
|> assign(:record, record)
|
|> assign(:record, record)
|
||||||
|> assign_similar_records()
|
|> assign_similar_records()
|
||||||
|> assign_embedding_text()}
|
|> RecordActions.assign_embedding_text()}
|
||||||
end
|
end
|
||||||
|
|
||||||
def handle_info({MusicLibraryWeb.Components.Chat, :chats_changed}, socket) do
|
def handle_info({MusicLibraryWeb.Components.Chat, :chats_changed}, socket) do
|
||||||
{:noreply,
|
RecordActions.handle_chats_changed(socket)
|
||||||
assign(socket, :chat_count, Chats.count_chats(:record, socket.assigns.record.musicbrainz_id))}
|
|
||||||
end
|
end
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
def handle_info({:update, record}, socket) do
|
def handle_info({:update, record}, socket) do
|
||||||
{:noreply,
|
{:noreply,
|
||||||
socket
|
socket
|
||||||
|> put_toast(:info, gettext("Record updated in the background"))
|
|> RecordActions.handle_record_updated(record)
|
||||||
|> assign(:record, record)
|
|> assign_similar_records()}
|
||||||
|> assign_similar_records()
|
|
||||||
|> assign_embedding_text()}
|
|
||||||
end
|
end
|
||||||
|
|
||||||
defp page_title(action, record) do
|
defp page_title(action, record) do
|
||||||
@@ -598,14 +532,4 @@ defmodule MusicLibraryWeb.CollectionLive.Show do
|
|||||||
|
|
||||||
assign(socket, :similar_records, similar_records)
|
assign(socket, :similar_records, similar_records)
|
||||||
end
|
end
|
||||||
|
|
||||||
defp assign_embedding_text(socket) do
|
|
||||||
case Similarity.get_embedding_text(socket.assigns.record.id) do
|
|
||||||
{:ok, text} ->
|
|
||||||
assign(socket, :embedding_text, text)
|
|
||||||
|
|
||||||
{:error, _reason} ->
|
|
||||||
assign(socket, :embedding_text, gettext("Not available"))
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -19,8 +19,7 @@ defmodule MusicLibraryWeb.WishlistLive.Show do
|
|||||||
alias MusicLibrary.Chats
|
alias MusicLibrary.Chats
|
||||||
alias MusicLibrary.OnlineStoreTemplates
|
alias MusicLibrary.OnlineStoreTemplates
|
||||||
alias MusicLibrary.{Records, RecordSets}
|
alias MusicLibrary.{Records, RecordSets}
|
||||||
alias MusicLibrary.Records.Similarity
|
alias MusicLibraryWeb.LiveHelpers.RecordActions
|
||||||
alias MusicLibraryWeb.ErrorMessages
|
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
def render(assigns) do
|
def render(assigns) do
|
||||||
@@ -307,7 +306,7 @@ defmodule MusicLibraryWeb.WishlistLive.Show do
|
|||||||
|> assign(:online_store_templates, online_store_templates)
|
|> assign(:online_store_templates, online_store_templates)
|
||||||
|> assign(:record_sets, record_sets)
|
|> assign(:record_sets, record_sets)
|
||||||
|> assign(:chat_count, Chats.count_chats(:record, record.musicbrainz_id))
|
|> assign(:chat_count, Chats.count_chats(:record, record.musicbrainz_id))
|
||||||
|> assign_embedding_text()}
|
|> RecordActions.assign_embedding_text()}
|
||||||
end
|
end
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
@@ -318,63 +317,15 @@ defmodule MusicLibraryWeb.WishlistLive.Show do
|
|||||||
end
|
end
|
||||||
|
|
||||||
def handle_event("refresh_musicbrainz_data", _params, socket) do
|
def handle_event("refresh_musicbrainz_data", _params, socket) do
|
||||||
record = socket.assigns.record
|
RecordActions.refresh_musicbrainz_data(socket)
|
||||||
|
|
||||||
case Records.refresh_musicbrainz_data(record) do
|
|
||||||
{:ok, updated_record} ->
|
|
||||||
{:noreply,
|
|
||||||
socket
|
|
||||||
|> put_toast(:info, gettext("MusicBrainz data refreshed successfully"))
|
|
||||||
|> assign(:record, updated_record)}
|
|
||||||
|
|
||||||
{:error, reason} ->
|
|
||||||
{:noreply,
|
|
||||||
socket
|
|
||||||
|> put_toast(
|
|
||||||
:error,
|
|
||||||
gettext("Error refreshing MusicBrainz data") <>
|
|
||||||
": " <> ErrorMessages.friendly_message(reason)
|
|
||||||
)}
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def handle_event("refresh_cover", _params, socket) do
|
def handle_event("refresh_cover", _params, socket) do
|
||||||
record = socket.assigns.record
|
RecordActions.refresh_cover(socket)
|
||||||
|
|
||||||
case Records.refresh_cover(record) do
|
|
||||||
{:ok, updated_record} ->
|
|
||||||
{:noreply,
|
|
||||||
socket
|
|
||||||
|> put_toast(:info, gettext("Cover refreshed successfully"))
|
|
||||||
|> assign(:record, updated_record)}
|
|
||||||
|
|
||||||
{:error, reason} ->
|
|
||||||
{:noreply,
|
|
||||||
socket
|
|
||||||
|> put_toast(
|
|
||||||
:error,
|
|
||||||
gettext("Error refreshing cover") <> ": " <> ErrorMessages.friendly_message(reason)
|
|
||||||
)}
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def handle_event("populate_genres", _params, socket) do
|
def handle_event("populate_genres", _params, socket) do
|
||||||
record = socket.assigns.record
|
RecordActions.populate_genres(socket)
|
||||||
|
|
||||||
case Records.populate_genres_async(record) do
|
|
||||||
{:ok, _worker} ->
|
|
||||||
{:noreply,
|
|
||||||
socket
|
|
||||||
|> put_toast(:info, gettext("In progress - record will update automatically"))}
|
|
||||||
|
|
||||||
{:error, reason} ->
|
|
||||||
{:noreply,
|
|
||||||
socket
|
|
||||||
|> put_toast(
|
|
||||||
:error,
|
|
||||||
gettext("Error") <> ": " <> ErrorMessages.friendly_message(reason)
|
|
||||||
)}
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def handle_event("add-to-collection", _params, socket) do
|
def handle_event("add-to-collection", _params, socket) do
|
||||||
@@ -394,23 +345,7 @@ defmodule MusicLibraryWeb.WishlistLive.Show do
|
|||||||
end
|
end
|
||||||
|
|
||||||
def handle_event("extract_colors", _params, socket) do
|
def handle_event("extract_colors", _params, socket) do
|
||||||
record = socket.assigns.record
|
RecordActions.extract_colors(socket)
|
||||||
|
|
||||||
case Records.extract_colors(record) do
|
|
||||||
{:ok, updated_record} ->
|
|
||||||
{:noreply,
|
|
||||||
socket
|
|
||||||
|> assign(:record, updated_record)
|
|
||||||
|> put_toast(:info, gettext("Colors extracted"))}
|
|
||||||
|
|
||||||
{:error, reason} ->
|
|
||||||
{:noreply,
|
|
||||||
socket
|
|
||||||
|> put_toast(
|
|
||||||
:error,
|
|
||||||
gettext("Error extracting colors") <> ": " <> ErrorMessages.friendly_message(reason)
|
|
||||||
)}
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
@@ -418,21 +353,16 @@ defmodule MusicLibraryWeb.WishlistLive.Show do
|
|||||||
{:noreply,
|
{:noreply,
|
||||||
socket
|
socket
|
||||||
|> assign(:record, record)
|
|> assign(:record, record)
|
||||||
|> assign_embedding_text()}
|
|> RecordActions.assign_embedding_text()}
|
||||||
end
|
end
|
||||||
|
|
||||||
def handle_info({MusicLibraryWeb.Components.Chat, :chats_changed}, socket) do
|
def handle_info({MusicLibraryWeb.Components.Chat, :chats_changed}, socket) do
|
||||||
{:noreply,
|
RecordActions.handle_chats_changed(socket)
|
||||||
assign(socket, :chat_count, Chats.count_chats(:record, socket.assigns.record.musicbrainz_id))}
|
|
||||||
end
|
end
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
def handle_info({:update, record}, socket) do
|
def handle_info({:update, record}, socket) do
|
||||||
{:noreply,
|
{:noreply, RecordActions.handle_record_updated(socket, record)}
|
||||||
socket
|
|
||||||
|> put_toast(:info, gettext("Record updated in the background"))
|
|
||||||
|> assign(:record, record)
|
|
||||||
|> assign_embedding_text()}
|
|
||||||
end
|
end
|
||||||
|
|
||||||
defp page_title(action, record) do
|
defp page_title(action, record) do
|
||||||
@@ -452,11 +382,4 @@ defmodule MusicLibraryWeb.WishlistLive.Show do
|
|||||||
|
|
||||||
defp title_segment(:show), do: gettext("Details")
|
defp title_segment(:show), do: gettext("Details")
|
||||||
defp title_segment(:edit), do: gettext("Edit")
|
defp title_segment(:edit), do: gettext("Edit")
|
||||||
|
|
||||||
defp assign_embedding_text(socket) do
|
|
||||||
case Similarity.get_embedding_text(socket.assigns.record.id) do
|
|
||||||
{:ok, text} -> assign(socket, :embedding_text, text)
|
|
||||||
{:error, _reason} -> assign(socket, :embedding_text, gettext("Not available"))
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -0,0 +1,122 @@
|
|||||||
|
defmodule MusicLibraryWeb.LiveHelpers.RecordActions do
|
||||||
|
@moduledoc """
|
||||||
|
Shared record action handlers for CollectionLive.Show and WishlistLive.Show.
|
||||||
|
|
||||||
|
Each function takes a socket (with a `:record` assign), performs the
|
||||||
|
operation, and returns `{:noreply, socket}` — ready to be returned
|
||||||
|
directly from a `handle_event/3` callback.
|
||||||
|
"""
|
||||||
|
|
||||||
|
import LiveToast, only: [put_toast: 3]
|
||||||
|
import Phoenix.Component, only: [assign: 3]
|
||||||
|
|
||||||
|
use Gettext, backend: MusicLibraryWeb.Gettext
|
||||||
|
|
||||||
|
alias MusicLibrary.Chats
|
||||||
|
alias MusicLibrary.Records
|
||||||
|
alias MusicLibrary.Records.Similarity
|
||||||
|
alias MusicLibraryWeb.ErrorMessages
|
||||||
|
|
||||||
|
def refresh_musicbrainz_data(socket) do
|
||||||
|
record = socket.assigns.record
|
||||||
|
|
||||||
|
case Records.refresh_musicbrainz_data(record) do
|
||||||
|
{:ok, updated_record} ->
|
||||||
|
{:noreply,
|
||||||
|
socket
|
||||||
|
|> put_toast(:info, gettext("MusicBrainz data refreshed successfully"))
|
||||||
|
|> assign(:record, updated_record)}
|
||||||
|
|
||||||
|
{:error, reason} ->
|
||||||
|
{:noreply,
|
||||||
|
socket
|
||||||
|
|> put_toast(
|
||||||
|
:error,
|
||||||
|
gettext("Error refreshing MusicBrainz data") <>
|
||||||
|
": " <> ErrorMessages.friendly_message(reason)
|
||||||
|
)}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def refresh_cover(socket) do
|
||||||
|
record = socket.assigns.record
|
||||||
|
|
||||||
|
case Records.refresh_cover(record) do
|
||||||
|
{:ok, updated_record} ->
|
||||||
|
{:noreply,
|
||||||
|
socket
|
||||||
|
|> put_toast(:info, gettext("Cover refreshed successfully"))
|
||||||
|
|> assign(:record, updated_record)}
|
||||||
|
|
||||||
|
{:error, reason} ->
|
||||||
|
{:noreply,
|
||||||
|
socket
|
||||||
|
|> put_toast(
|
||||||
|
:error,
|
||||||
|
gettext("Error refreshing cover") <> ": " <> ErrorMessages.friendly_message(reason)
|
||||||
|
)}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def populate_genres(socket) do
|
||||||
|
record = socket.assigns.record
|
||||||
|
|
||||||
|
case Records.populate_genres_async(record) do
|
||||||
|
{:ok, _worker} ->
|
||||||
|
{:noreply,
|
||||||
|
socket
|
||||||
|
|> put_toast(:info, gettext("In progress - record will update automatically"))}
|
||||||
|
|
||||||
|
{:error, reason} ->
|
||||||
|
{:noreply,
|
||||||
|
socket
|
||||||
|
|> put_toast(
|
||||||
|
:error,
|
||||||
|
gettext("Error") <> ": " <> ErrorMessages.friendly_message(reason)
|
||||||
|
)}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def extract_colors(socket) do
|
||||||
|
record = socket.assigns.record
|
||||||
|
|
||||||
|
case Records.extract_colors(record) do
|
||||||
|
{:ok, updated_record} ->
|
||||||
|
{:noreply,
|
||||||
|
socket
|
||||||
|
|> assign(:record, updated_record)
|
||||||
|
|> put_toast(:info, gettext("Colors extracted"))}
|
||||||
|
|
||||||
|
{:error, reason} ->
|
||||||
|
{:noreply,
|
||||||
|
socket
|
||||||
|
|> put_toast(
|
||||||
|
:error,
|
||||||
|
gettext("Error extracting colors") <> ": " <> ErrorMessages.friendly_message(reason)
|
||||||
|
)}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def handle_chats_changed(socket) do
|
||||||
|
{:noreply,
|
||||||
|
assign(socket, :chat_count, Chats.count_chats(:record, socket.assigns.record.musicbrainz_id))}
|
||||||
|
end
|
||||||
|
|
||||||
|
@doc """
|
||||||
|
Handles a background record update. Returns the updated socket (not wrapped
|
||||||
|
in `{:noreply, ...}`) so the caller can pipe additional assigns.
|
||||||
|
"""
|
||||||
|
def handle_record_updated(socket, record) do
|
||||||
|
socket
|
||||||
|
|> put_toast(:info, gettext("Record updated in the background"))
|
||||||
|
|> assign(:record, record)
|
||||||
|
|> assign_embedding_text()
|
||||||
|
end
|
||||||
|
|
||||||
|
def assign_embedding_text(socket) do
|
||||||
|
case Similarity.get_embedding_text(socket.assigns.record.id) do
|
||||||
|
{:ok, text} -> assign(socket, :embedding_text, text)
|
||||||
|
{:error, _reason} -> assign(socket, :embedding_text, gettext("Not available"))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
+10
-18
@@ -252,14 +252,12 @@ msgstr ""
|
|||||||
msgid "Includes"
|
msgid "Includes"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: lib/music_library_web/live/collection_live/show.ex
|
#: lib/music_library_web/live_helpers/record_actions.ex
|
||||||
#: lib/music_library_web/live/wishlist_live/show.ex
|
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Error refreshing MusicBrainz data"
|
msgid "Error refreshing MusicBrainz data"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: lib/music_library_web/live/collection_live/show.ex
|
#: lib/music_library_web/live_helpers/record_actions.ex
|
||||||
#: lib/music_library_web/live/wishlist_live/show.ex
|
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
msgid "MusicBrainz data refreshed successfully"
|
msgid "MusicBrainz data refreshed successfully"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -269,14 +267,12 @@ msgstr ""
|
|||||||
msgid "Refresh LastFm Feed"
|
msgid "Refresh LastFm Feed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: lib/music_library_web/live/collection_live/show.ex
|
#: lib/music_library_web/live_helpers/record_actions.ex
|
||||||
#: lib/music_library_web/live/wishlist_live/show.ex
|
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Cover refreshed successfully"
|
msgid "Cover refreshed successfully"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: lib/music_library_web/live/collection_live/show.ex
|
#: lib/music_library_web/live_helpers/record_actions.ex
|
||||||
#: lib/music_library_web/live/wishlist_live/show.ex
|
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Error refreshing cover"
|
msgid "Error refreshing cover"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -611,8 +607,7 @@ msgstr ""
|
|||||||
msgid "Meta"
|
msgid "Meta"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: lib/music_library_web/live/collection_live/show.ex
|
#: lib/music_library_web/live_helpers/record_actions.ex
|
||||||
#: lib/music_library_web/live/wishlist_live/show.ex
|
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Record updated in the background"
|
msgid "Record updated in the background"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -807,13 +802,13 @@ msgid "Last listened at"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: lib/music_library_web/live/collection_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_actions.ex
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Error"
|
msgid "Error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: lib/music_library_web/live/collection_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_actions.ex
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
msgid "In progress - record will update automatically"
|
msgid "In progress - record will update automatically"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1553,8 +1548,7 @@ msgstr ""
|
|||||||
msgid "Running optimize..."
|
msgid "Running optimize..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: lib/music_library_web/live/collection_live/show.ex
|
#: lib/music_library_web/live_helpers/record_actions.ex
|
||||||
#: lib/music_library_web/live/wishlist_live/show.ex
|
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Not available"
|
msgid "Not available"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1998,14 +1992,12 @@ msgstr ""
|
|||||||
msgid "Failed to store cover image"
|
msgid "Failed to store cover image"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: lib/music_library_web/live/collection_live/show.ex
|
#: lib/music_library_web/live_helpers/record_actions.ex
|
||||||
#: lib/music_library_web/live/wishlist_live/show.ex
|
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Colors extracted"
|
msgid "Colors extracted"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: lib/music_library_web/live/collection_live/show.ex
|
#: lib/music_library_web/live_helpers/record_actions.ex
|
||||||
#: lib/music_library_web/live/wishlist_live/show.ex
|
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Error extracting colors"
|
msgid "Error extracting colors"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|||||||
@@ -252,14 +252,12 @@ msgstr ""
|
|||||||
msgid "Includes"
|
msgid "Includes"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: lib/music_library_web/live/collection_live/show.ex
|
#: lib/music_library_web/live_helpers/record_actions.ex
|
||||||
#: lib/music_library_web/live/wishlist_live/show.ex
|
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Error refreshing MusicBrainz data"
|
msgid "Error refreshing MusicBrainz data"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: lib/music_library_web/live/collection_live/show.ex
|
#: lib/music_library_web/live_helpers/record_actions.ex
|
||||||
#: lib/music_library_web/live/wishlist_live/show.ex
|
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
msgid "MusicBrainz data refreshed successfully"
|
msgid "MusicBrainz data refreshed successfully"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -269,14 +267,12 @@ msgstr ""
|
|||||||
msgid "Refresh LastFm Feed"
|
msgid "Refresh LastFm Feed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: lib/music_library_web/live/collection_live/show.ex
|
#: lib/music_library_web/live_helpers/record_actions.ex
|
||||||
#: lib/music_library_web/live/wishlist_live/show.ex
|
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Cover refreshed successfully"
|
msgid "Cover refreshed successfully"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: lib/music_library_web/live/collection_live/show.ex
|
#: lib/music_library_web/live_helpers/record_actions.ex
|
||||||
#: lib/music_library_web/live/wishlist_live/show.ex
|
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Error refreshing cover"
|
msgid "Error refreshing cover"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -611,8 +607,7 @@ msgstr ""
|
|||||||
msgid "Meta"
|
msgid "Meta"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: lib/music_library_web/live/collection_live/show.ex
|
#: lib/music_library_web/live_helpers/record_actions.ex
|
||||||
#: lib/music_library_web/live/wishlist_live/show.ex
|
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Record updated in the background"
|
msgid "Record updated in the background"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -807,13 +802,13 @@ msgid "Last listened at"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: lib/music_library_web/live/collection_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_actions.ex
|
||||||
#, elixir-autogen, elixir-format, fuzzy
|
#, elixir-autogen, elixir-format, fuzzy
|
||||||
msgid "Error"
|
msgid "Error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: lib/music_library_web/live/collection_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_actions.ex
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
msgid "In progress - record will update automatically"
|
msgid "In progress - record will update automatically"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1553,8 +1548,7 @@ msgstr ""
|
|||||||
msgid "Running optimize..."
|
msgid "Running optimize..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: lib/music_library_web/live/collection_live/show.ex
|
#: lib/music_library_web/live_helpers/record_actions.ex
|
||||||
#: lib/music_library_web/live/wishlist_live/show.ex
|
|
||||||
#, elixir-autogen, elixir-format, fuzzy
|
#, elixir-autogen, elixir-format, fuzzy
|
||||||
msgid "Not available"
|
msgid "Not available"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -1998,14 +1992,12 @@ msgstr ""
|
|||||||
msgid "Failed to store cover image"
|
msgid "Failed to store cover image"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: lib/music_library_web/live/collection_live/show.ex
|
#: lib/music_library_web/live_helpers/record_actions.ex
|
||||||
#: lib/music_library_web/live/wishlist_live/show.ex
|
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Colors extracted"
|
msgid "Colors extracted"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: lib/music_library_web/live/collection_live/show.ex
|
#: lib/music_library_web/live_helpers/record_actions.ex
|
||||||
#: lib/music_library_web/live/wishlist_live/show.ex
|
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Error extracting colors"
|
msgid "Error extracting colors"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|||||||
Reference in New Issue
Block a user