Link Last.fm account from tracks

This commit is contained in:
Claudio Ortolina
2025-05-07 11:26:41 +01:00
parent 790a7db3d7
commit fddc2dcbf0
6 changed files with 37 additions and 8 deletions
+6 -2
View File
@@ -1,7 +1,11 @@
defmodule MusicLibrary.ScrobbleActivity do
alias LastFm.Scrobble
alias MusicBrainz.Release
alias MusicLibrary.{Artists, Collection, Wishlist}
alias MusicLibrary.{Artists, Collection, Secrets, Wishlist}
def can_scrobble? do
Secrets.get("last_fm_session_key") !== nil
end
def scrobble(release_with_tracks, opts) when is_list(opts) do
case opts do
@@ -26,7 +30,7 @@ defmodule MusicLibrary.ScrobbleActivity do
end
def scrobble(release_with_tracks, {:started_at, started_at}) do
session_key = MusicLibrary.Secrets.get!("last_fm_session_key").value
session_key = Secrets.get!("last_fm_session_key").value
{scrobbles, _finished_at} =
release_with_tracks
+4
View File
@@ -11,4 +11,8 @@ defmodule MusicLibrary.Secrets do
def get!(name) do
Repo.get!(Secret, name)
end
def get(name) do
Repo.get(Secret, name)
end
end
@@ -35,8 +35,5 @@
</button>
</div>
</.form>
<a href={LastFm.auth_url()} class="flex items-center justify-center">
Connect to Last.fm
</a>
</div>
</div>
@@ -27,7 +27,10 @@ defmodule MusicLibraryWeb.CollectionLive.Show do
Records.subscribe(record_id)
end
{:ok, assign(socket, :release_with_tracks, nil)}
{:ok,
socket
|> assign(:can_scrobble?, ScrobbleActivity.can_scrobble?())
|> assign(:release_with_tracks, nil)}
end
@impl true
@@ -282,8 +282,6 @@
>
<h3 class="text-lg font-semibold text-zinc-700 dark:text-zinc-300">{gettext("Tracks")}</h3>
<.button phx-click="scrobble_release">{gettext("Scrobble to Last.fm")}</.button>
<div :if={@release_with_tracks} class="space-y-4 mt-4">
<.async_result :let={release_with_tracks} assign={@release_with_tracks}>
<:loading>
@@ -335,6 +333,24 @@
</div>
</.async_result>
</div>
<.button :if={@can_scrobble?} phx-click="scrobble_release">
{gettext("Scrobble to Last.fm")}
</.button>
<a
:if={!@can_scrobble?}
class={[
"relative inline-flex items-center rounded-md",
"mt-4 px-3 py-2 text-xs sm:text-sm font-semibold",
"bg-zinc-900 hover:bg-zinc-800 dark:bg-zinc-100 dark:hover:bg-zinc-200",
"disabled:bg-zinc-300 dark:disabled:bg-zinc-300 disabled:active:text-white",
"text-white active:text-white/80 dark:text-zinc-900 dark:active:text-zinc-900/80",
"focus-visible:outline focus-visible:outline-offset-2 focus-visible:outline-zinc-600"
]}
href={LastFm.auth_url()}
>
{gettext("Connect your Last.fm account")}
</a>
</Fluxon.Components.Sheet.sheet>
<.modal