Prevent multiple scrobbles for 3 seconds
This commit is contained in:
@@ -10,7 +10,8 @@ defmodule MusicLibraryWeb.ReleaseComponent do
|
||||
def mount(socket) do
|
||||
{:ok,
|
||||
socket
|
||||
|> assign(:can_scrobble?, ScrobbleActivity.can_scrobble?())}
|
||||
|> assign(:can_scrobble?, ScrobbleActivity.can_scrobble?())
|
||||
|> assign(:already_scrobbled, false)}
|
||||
end
|
||||
|
||||
@impl true
|
||||
@@ -25,6 +26,10 @@ defmodule MusicLibraryWeb.ReleaseComponent do
|
||||
end)}
|
||||
end
|
||||
|
||||
def update(%{already_scrobbled: _already_scrobbled} = assigns, socket) do
|
||||
{:ok, assign(socket, assigns)}
|
||||
end
|
||||
|
||||
@impl true
|
||||
def render(assigns) do
|
||||
~H"""
|
||||
@@ -40,6 +45,7 @@ defmodule MusicLibraryWeb.ReleaseComponent do
|
||||
<.button
|
||||
:if={@can_scrobble?}
|
||||
size="sm"
|
||||
disabled={@already_scrobbled}
|
||||
phx-click="scrobble_release"
|
||||
phx-target={@myself}
|
||||
phx-disable-with={gettext("Scrobbling...")}
|
||||
@@ -79,6 +85,7 @@ defmodule MusicLibraryWeb.ReleaseComponent do
|
||||
<.button
|
||||
:if={@can_scrobble?}
|
||||
size="sm"
|
||||
disabled={@already_scrobbled}
|
||||
phx-click="scrobble_medium"
|
||||
phx-value-number={medium.number}
|
||||
phx-target={@myself}
|
||||
@@ -135,8 +142,11 @@ defmodule MusicLibraryWeb.ReleaseComponent do
|
||||
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)
|
||||
|
||||
{:noreply,
|
||||
socket
|
||||
|> assign(:already_scrobbled, true)
|
||||
|> put_flash(:info, gettext("Release scrobbled successfully"))}
|
||||
|
||||
{:error, reason} ->
|
||||
@@ -162,8 +172,11 @@ defmodule MusicLibraryWeb.ReleaseComponent do
|
||||
finished_at: DateTime.utc_now()
|
||||
) do
|
||||
{:ok, _} ->
|
||||
send_update_after(socket.assigns.myself, %{already_scrobbled: false}, 3000)
|
||||
|
||||
{:noreply,
|
||||
socket
|
||||
|> assign(:already_scrobbled, true)
|
||||
|> put_flash(:info, gettext("Disc scrobbled successfully"))}
|
||||
|
||||
{:error, reason} ->
|
||||
|
||||
Reference in New Issue
Block a user