Enable scrobbling selected tracks in scrobble anything view
This commit is contained in:
@@ -313,6 +313,14 @@ defmodule MusicLibraryWeb.Components.Release do
|
||||
{:noreply, socket |> put_toast(:error, gettext("Error scrobbling selected tracks"))}
|
||||
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
|
||||
medium
|
||||
|> MusicBrainz.Release.medium_duration()
|
||||
@@ -326,12 +334,4 @@ defmodule MusicLibraryWeb.Components.Release do
|
||||
medium.title
|
||||
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
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
defmodule MusicLibraryWeb.ScrobbleLive.Show do
|
||||
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
|
||||
|
||||
@@ -12,7 +12,8 @@ defmodule MusicLibraryWeb.ScrobbleLive.Show do
|
||||
current_section: :scrobble,
|
||||
release: nil,
|
||||
can_scrobble: ScrobbleActivity.can_scrobble?(),
|
||||
page_title: "Scrobble Release"
|
||||
page_title: "Scrobble Release",
|
||||
selected_tracks: MapSet.new()
|
||||
)}
|
||||
end
|
||||
|
||||
@@ -80,4 +81,46 @@ defmodule MusicLibraryWeb.ScrobbleLive.Show do
|
||||
)}
|
||||
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
|
||||
|
||||
@@ -81,10 +81,14 @@
|
||||
|
||||
<.button
|
||||
:if={@can_scrobble}
|
||||
phx-click="scrobble_release"
|
||||
phx-click={
|
||||
if MapSet.size(@selected_tracks) > 0,
|
||||
do: "scrobble_selected_tracks",
|
||||
else: "scrobble_release"
|
||||
}
|
||||
size="sm"
|
||||
>
|
||||
{gettext("Scrobble release")}
|
||||
{scrobble_button_label(@selected_tracks)}
|
||||
</.button>
|
||||
</div>
|
||||
|
||||
@@ -94,7 +98,7 @@
|
||||
already_scrobbled={false}
|
||||
medium={medium}
|
||||
release_artists={@release.artists}
|
||||
selected_tracks={MapSet.new()}
|
||||
selected_tracks={@selected_tracks}
|
||||
media_count={MusicBrainz.Release.media_count(@release)}
|
||||
myself={nil}
|
||||
/>
|
||||
|
||||
@@ -761,7 +761,6 @@ msgid "Scrobbling..."
|
||||
msgstr ""
|
||||
|
||||
#: lib/music_library_web/components/release.ex
|
||||
#: lib/music_library_web/live/scrobble_live/show.html.heex
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Scrobble release"
|
||||
msgstr ""
|
||||
@@ -772,16 +771,19 @@ msgid "Scrobble selected tracks"
|
||||
msgstr ""
|
||||
|
||||
#: lib/music_library_web/components/release.ex
|
||||
#: lib/music_library_web/live/scrobble_live/show.ex
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Selected tracks scrobbled successfully"
|
||||
msgstr ""
|
||||
|
||||
#: lib/music_library_web/components/release.ex
|
||||
#: lib/music_library_web/live/scrobble_live/show.ex
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Error scrobbling selected tracks"
|
||||
msgstr ""
|
||||
|
||||
#: lib/music_library_web/components/release.ex
|
||||
#: lib/music_library_web/live/scrobble_live/show.ex
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "No tracks selected"
|
||||
msgstr ""
|
||||
|
||||
@@ -761,7 +761,6 @@ msgid "Scrobbling..."
|
||||
msgstr ""
|
||||
|
||||
#: lib/music_library_web/components/release.ex
|
||||
#: lib/music_library_web/live/scrobble_live/show.html.heex
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Scrobble release"
|
||||
msgstr ""
|
||||
@@ -772,16 +771,19 @@ msgid "Scrobble selected tracks"
|
||||
msgstr ""
|
||||
|
||||
#: lib/music_library_web/components/release.ex
|
||||
#: lib/music_library_web/live/scrobble_live/show.ex
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Selected tracks scrobbled successfully"
|
||||
msgstr ""
|
||||
|
||||
#: lib/music_library_web/components/release.ex
|
||||
#: lib/music_library_web/live/scrobble_live/show.ex
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "Error scrobbling selected tracks"
|
||||
msgstr ""
|
||||
|
||||
#: lib/music_library_web/components/release.ex
|
||||
#: lib/music_library_web/live/scrobble_live/show.ex
|
||||
#, elixir-autogen, elixir-format
|
||||
msgid "No tracks selected"
|
||||
msgstr ""
|
||||
|
||||
Reference in New Issue
Block a user