Enable scrobbling selected tracks in scrobble anything view

This commit is contained in:
Claudio Ortolina
2025-11-11 08:15:38 +00:00
parent de195aa970
commit 249fe712fe
5 changed files with 66 additions and 15 deletions
+8 -8
View File
@@ -313,6 +313,14 @@ defmodule MusicLibraryWeb.Components.Release do
{:noreply, socket |> put_toast(:error, gettext("Error scrobbling selected tracks"))} {:noreply, socket |> put_toast(:error, gettext("Error scrobbling selected tracks"))}
end end
def scrobble_button_label(selected_tracks) do
if MapSet.size(selected_tracks) > 0 do
gettext("Scrobble selected tracks")
else
gettext("Scrobble release")
end
end
defp medium_duration(medium) do defp medium_duration(medium) do
medium medium
|> MusicBrainz.Release.medium_duration() |> MusicBrainz.Release.medium_duration()
@@ -326,12 +334,4 @@ defmodule MusicLibraryWeb.Components.Release do
medium.title medium.title
end end
end end
defp scrobble_button_label(selected_tracks) do
if MapSet.size(selected_tracks) > 0 do
gettext("Scrobble selected tracks")
else
gettext("Scrobble release")
end
end
end end
@@ -1,7 +1,7 @@
defmodule MusicLibraryWeb.ScrobbleLive.Show do defmodule MusicLibraryWeb.ScrobbleLive.Show do
use MusicLibraryWeb, :live_view use MusicLibraryWeb, :live_view
import(MusicLibraryWeb.Components.Release, only: [medium: 1]) import(MusicLibraryWeb.Components.Release, only: [medium: 1, scrobble_button_label: 1])
alias MusicLibrary.ScrobbleActivity alias MusicLibrary.ScrobbleActivity
@@ -12,7 +12,8 @@ defmodule MusicLibraryWeb.ScrobbleLive.Show do
current_section: :scrobble, current_section: :scrobble,
release: nil, release: nil,
can_scrobble: ScrobbleActivity.can_scrobble?(), can_scrobble: ScrobbleActivity.can_scrobble?(),
page_title: "Scrobble Release" page_title: "Scrobble Release",
selected_tracks: MapSet.new()
)} )}
end end
@@ -80,4 +81,46 @@ defmodule MusicLibraryWeb.ScrobbleLive.Show do
)} )}
end end
end end
def handle_event("scrobble_selected_tracks", _params, socket) do
release_with_tracks = socket.assigns.release
selected_track_ids = socket.assigns.selected_tracks
if MapSet.size(selected_track_ids) == 0 do
{:noreply, socket |> put_toast(:error, gettext("No tracks selected"))}
else
case ScrobbleActivity.scrobble_tracks(
selected_track_ids,
release_with_tracks,
finished_at: DateTime.utc_now()
) do
{:ok, _} ->
{:noreply,
socket
|> assign(:selected_tracks, MapSet.new())
|> put_toast(:info, gettext("Selected tracks scrobbled successfully"))}
{:error, reason} ->
{:noreply,
socket
|> put_toast(
:error,
gettext("Error scrobbling selected tracks") <> "," <> inspect(reason)
)}
end
end
end
def handle_event("toggle_track", %{"track-id" => track_id}, socket) do
selected_tracks = socket.assigns.selected_tracks
updated_tracks =
if MapSet.member?(selected_tracks, track_id) do
MapSet.delete(selected_tracks, track_id)
else
MapSet.put(selected_tracks, track_id)
end
{:noreply, assign(socket, :selected_tracks, updated_tracks)}
end
end end
@@ -81,10 +81,14 @@
<.button <.button
:if={@can_scrobble} :if={@can_scrobble}
phx-click="scrobble_release" phx-click={
if MapSet.size(@selected_tracks) > 0,
do: "scrobble_selected_tracks",
else: "scrobble_release"
}
size="sm" size="sm"
> >
{gettext("Scrobble release")} {scrobble_button_label(@selected_tracks)}
</.button> </.button>
</div> </div>
@@ -94,7 +98,7 @@
already_scrobbled={false} already_scrobbled={false}
medium={medium} medium={medium}
release_artists={@release.artists} release_artists={@release.artists}
selected_tracks={MapSet.new()} selected_tracks={@selected_tracks}
media_count={MusicBrainz.Release.media_count(@release)} media_count={MusicBrainz.Release.media_count(@release)}
myself={nil} myself={nil}
/> />
+3 -1
View File
@@ -761,7 +761,6 @@ msgid "Scrobbling..."
msgstr "" msgstr ""
#: lib/music_library_web/components/release.ex #: lib/music_library_web/components/release.ex
#: lib/music_library_web/live/scrobble_live/show.html.heex
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Scrobble release" msgid "Scrobble release"
msgstr "" msgstr ""
@@ -772,16 +771,19 @@ msgid "Scrobble selected tracks"
msgstr "" msgstr ""
#: lib/music_library_web/components/release.ex #: lib/music_library_web/components/release.ex
#: lib/music_library_web/live/scrobble_live/show.ex
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Selected tracks scrobbled successfully" msgid "Selected tracks scrobbled successfully"
msgstr "" msgstr ""
#: lib/music_library_web/components/release.ex #: lib/music_library_web/components/release.ex
#: lib/music_library_web/live/scrobble_live/show.ex
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Error scrobbling selected tracks" msgid "Error scrobbling selected tracks"
msgstr "" msgstr ""
#: lib/music_library_web/components/release.ex #: lib/music_library_web/components/release.ex
#: lib/music_library_web/live/scrobble_live/show.ex
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "No tracks selected" msgid "No tracks selected"
msgstr "" msgstr ""
+3 -1
View File
@@ -761,7 +761,6 @@ msgid "Scrobbling..."
msgstr "" msgstr ""
#: lib/music_library_web/components/release.ex #: lib/music_library_web/components/release.ex
#: lib/music_library_web/live/scrobble_live/show.html.heex
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Scrobble release" msgid "Scrobble release"
msgstr "" msgstr ""
@@ -772,16 +771,19 @@ msgid "Scrobble selected tracks"
msgstr "" msgstr ""
#: lib/music_library_web/components/release.ex #: lib/music_library_web/components/release.ex
#: lib/music_library_web/live/scrobble_live/show.ex
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Selected tracks scrobbled successfully" msgid "Selected tracks scrobbled successfully"
msgstr "" msgstr ""
#: lib/music_library_web/components/release.ex #: lib/music_library_web/components/release.ex
#: lib/music_library_web/live/scrobble_live/show.ex
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Error scrobbling selected tracks" msgid "Error scrobbling selected tracks"
msgstr "" msgstr ""
#: lib/music_library_web/components/release.ex #: lib/music_library_web/components/release.ex
#: lib/music_library_web/live/scrobble_live/show.ex
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "No tracks selected" msgid "No tracks selected"
msgstr "" msgstr ""