84 lines
2.1 KiB
Elixir
84 lines
2.1 KiB
Elixir
defmodule MusicLibraryWeb.ScrobbleLive.Show do
|
|
use MusicLibraryWeb, :live_view
|
|
|
|
import(MusicLibraryWeb.Components.Release, only: [medium: 1])
|
|
|
|
alias MusicLibrary.ScrobbleActivity
|
|
|
|
@impl true
|
|
def mount(_params, _session, socket) do
|
|
{:ok,
|
|
assign(socket,
|
|
current_section: :scrobble,
|
|
release: nil,
|
|
can_scrobble: ScrobbleActivity.can_scrobble?(),
|
|
page_title: "Scrobble Release"
|
|
)}
|
|
end
|
|
|
|
@impl true
|
|
def handle_params(params, _url, socket) do
|
|
apply_action(socket, socket.assigns.live_action, params)
|
|
end
|
|
|
|
defp apply_action(socket, :show, %{"release_id" => release_id}) do
|
|
case MusicBrainz.get_release(release_id) do
|
|
{:ok, release} ->
|
|
release = MusicBrainz.Release.from_api_response(release)
|
|
|
|
{:noreply,
|
|
assign(socket,
|
|
release: release,
|
|
page_title: "Scrobble: #{release.title}"
|
|
)}
|
|
|
|
{:error, _reason} ->
|
|
{:noreply,
|
|
socket
|
|
|> put_flash(:error, "Failed to fetch release details")
|
|
|> push_navigate(to: ~p"/scrobble")}
|
|
end
|
|
end
|
|
|
|
@impl true
|
|
def handle_event("scrobble_release", _params, socket) do
|
|
case ScrobbleActivity.scrobble_release(socket.assigns.release,
|
|
finished_at: DateTime.utc_now()
|
|
) do
|
|
{:ok, _} ->
|
|
{:noreply,
|
|
socket
|
|
|> put_toast(:info, gettext("Release scrobbled successfully"))}
|
|
|
|
{:error, reason} ->
|
|
{:noreply,
|
|
socket
|
|
|> put_toast(
|
|
:error,
|
|
gettext("Error scrobbling release") <> "," <> inspect(reason)
|
|
)}
|
|
end
|
|
end
|
|
|
|
def handle_event("scrobble_medium", %{"medium_number" => number}, socket) do
|
|
number = String.to_integer(number)
|
|
|
|
case ScrobbleActivity.scrobble_medium(number, socket.assigns.release,
|
|
finished_at: DateTime.utc_now()
|
|
) do
|
|
{:ok, _} ->
|
|
{:noreply,
|
|
socket
|
|
|> put_toast(:info, gettext("Disc scrobbled successfully"))}
|
|
|
|
{:error, reason} ->
|
|
{:noreply,
|
|
socket
|
|
|> put_toast(
|
|
:error,
|
|
gettext("Error scrobbling disc") <> "," <> inspect(reason)
|
|
)}
|
|
end
|
|
end
|
|
end
|