<.button
- :if={@can_scrobble?}
+ :if={@can_scrobble? && @release_with_tracks.ok?}
size="sm"
disabled={@already_scrobbled}
phx-click="scrobble_release"
@@ -62,8 +64,10 @@ defmodule MusicLibraryWeb.Components.Release do
<.async_result :let={release_with_tracks} assign={@release_with_tracks}>
<:loading>
-
{gettext("Loading release with tracks")}
- <.loading />
+
+ {gettext("Loading release with tracks")}
+ <.loading />
+
<:failed :let={_failure}>
@@ -176,67 +180,65 @@ defmodule MusicLibraryWeb.Components.Release do
"""
end
+ defguardp release_loaded?(assigns) when assigns.release_with_tracks.ok?
+
@impl true
- def handle_event("scrobble_release", _params, socket) do
- release_with_tracks_async_result =
- socket.assigns.release_with_tracks
+ def handle_event("scrobble_release", _params, socket) when release_loaded?(socket.assigns) do
+ release_with_tracks = socket.assigns.release_with_tracks.result
- if release_with_tracks =
- release_with_tracks_async_result && release_with_tracks_async_result.result do
- case ScrobbleActivity.scrobble_release(release_with_tracks, finished_at: DateTime.utc_now()) do
- {:ok, _} ->
- send_update_after(socket.assigns.myself, %{already_scrobbled: false}, 3000)
+ case ScrobbleActivity.scrobble_release(release_with_tracks, finished_at: DateTime.utc_now()) do
+ {:ok, _} ->
+ send_update_after(socket.assigns.myself, %{already_scrobbled: false}, 3000)
- {:noreply,
- socket
- |> assign(:already_scrobbled, true)
- |> put_toast(:info, gettext("Release scrobbled successfully"))}
+ {:noreply,
+ socket
+ |> assign(:already_scrobbled, true)
+ |> put_toast(:info, gettext("Release scrobbled successfully"))}
- {:error, reason} ->
- {:noreply,
- socket
- |> put_toast(
- :error,
- gettext("Error scrobbling release") <> "," <> inspect(reason)
- )}
- end
- else
- {:noreply, socket |> put_toast(:error, gettext("Error scrobbling release"))}
+ {:error, reason} ->
+ {:noreply,
+ socket
+ |> put_toast(
+ :error,
+ gettext("Error scrobbling release") <> "," <> inspect(reason)
+ )}
end
end
- def handle_event("scrobble_medium", %{"number" => number}, socket) do
- release_with_tracks_async_result =
- socket.assigns.release_with_tracks
+ def handle_event("scrobble_release", _params, socket) do
+ {:noreply, socket |> put_toast(:error, gettext("Error scrobbling release"))}
+ end
+ def handle_event("scrobble_medium", %{"number" => number}, socket)
+ when release_loaded?(socket.assigns) do
+ release_with_tracks = socket.assigns.release_with_tracks.result
number = String.to_integer(number)
- if release_with_tracks =
- release_with_tracks_async_result && release_with_tracks_async_result.result do
- case ScrobbleActivity.scrobble_medium(number, release_with_tracks,
- finished_at: DateTime.utc_now()
- ) do
- {:ok, _} ->
- send_update_after(socket.assigns.myself, %{already_scrobbled: false}, 3000)
+ case ScrobbleActivity.scrobble_medium(number, release_with_tracks,
+ finished_at: DateTime.utc_now()
+ ) do
+ {:ok, _} ->
+ send_update_after(socket.assigns.myself, %{already_scrobbled: false}, 3000)
- {:noreply,
- socket
- |> assign(:already_scrobbled, true)
- |> put_toast(:info, gettext("Disc scrobbled successfully"))}
+ {:noreply,
+ socket
+ |> assign(:already_scrobbled, true)
+ |> put_toast(:info, gettext("Disc scrobbled successfully"))}
- {:error, reason} ->
- {:noreply,
- socket
- |> put_toast(
- :error,
- gettext("Error scrobbling disc") <> "," <> inspect(reason)
- )}
- end
- else
- {:noreply, socket |> put_toast(:error, gettext("Error scrobbling disc"))}
+ {:error, reason} ->
+ {:noreply,
+ socket
+ |> put_toast(
+ :error,
+ gettext("Error scrobbling disc") <> "," <> inspect(reason)
+ )}
end
end
+ def handle_event("scrobble_medium", _params, socket) do
+ {:noreply, socket |> put_toast(:error, gettext("Error scrobbling disc"))}
+ end
+
defp medium_duration(medium) do
medium
|> MusicBrainz.Release.medium_duration()