diff --git a/lib/music_library_web/live/wishlist_live/show.ex b/lib/music_library_web/live/wishlist_live/show.ex index 84f7cc42..676c3c52 100644 --- a/lib/music_library_web/live/wishlist_live/show.ex +++ b/lib/music_library_web/live/wishlist_live/show.ex @@ -1,6 +1,8 @@ defmodule MusicLibraryWeb.WishlistLive.Show do use MusicLibraryWeb, :live_view + require Logger + import MusicLibraryWeb.RecordComponents, only: [ artist_links: 1, @@ -18,7 +20,8 @@ defmodule MusicLibraryWeb.WishlistLive.Show do alias MusicLibrary.Chats alias MusicLibrary.OnlineStoreTemplates - alias MusicLibrary.{Records, RecordSets} + alias MusicLibrary.{Records, RecordSets, ScrobbleActivity} + alias MusicLibraryWeb.ErrorMessages alias MusicLibraryWeb.LiveHelpers.RecordActions @impl true @@ -45,6 +48,19 @@ defmodule MusicLibraryWeb.WishlistLive.Show do
<.button_group> + <.button + :if={@can_scrobble? and @record.selected_release_id} + variant="soft" + phx-click="scrobble_release" + > + {gettext("Scrobble release")} + <.icon + name="hero-play" + class="icon" + aria-hidden="true" + data-slot="icon" + /> + <.button variant="soft" phx-click={MusicLibraryWeb.Components.Chat.open("record-chat-sheet")} @@ -319,6 +335,7 @@ defmodule MusicLibraryWeb.WishlistLive.Show do {:ok, socket |> assign(current_section: :wishlist) + |> assign(:can_scrobble?, ScrobbleActivity.can_scrobble?()) |> assign(:current_date, current_date)} end @@ -380,6 +397,44 @@ defmodule MusicLibraryWeb.WishlistLive.Show 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)} + 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) + )} + end + @impl true def handle_info({MusicLibraryWeb.Components.RecordForm, {:saved, record}}, socket) do {:noreply, diff --git a/priv/gettext/default.pot b/priv/gettext/default.pot index f53846e2..7b09ebbc 100644 --- a/priv/gettext/default.pot +++ b/priv/gettext/default.pot @@ -640,12 +640,14 @@ 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 #, 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 #, elixir-autogen, elixir-format msgid "Release scrobbled successfully" msgstr "" @@ -662,6 +664,7 @@ 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 #, elixir-autogen, elixir-format msgid "Scrobble release" msgstr "" diff --git a/priv/gettext/en/LC_MESSAGES/default.po b/priv/gettext/en/LC_MESSAGES/default.po index feaf2219..f622bc6f 100644 --- a/priv/gettext/en/LC_MESSAGES/default.po +++ b/priv/gettext/en/LC_MESSAGES/default.po @@ -640,12 +640,14 @@ 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 #, 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 #, elixir-autogen, elixir-format msgid "Release scrobbled successfully" msgstr "" @@ -662,6 +664,7 @@ 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 #, elixir-autogen, elixir-format msgid "Scrobble release" msgstr ""