diff --git a/lib/music_library_web/components/release.ex b/lib/music_library_web/components/release.ex index 0d7a2231..0a5c3da5 100644 --- a/lib/music_library_web/components/release.ex +++ b/lib/music_library_web/components/release.ex @@ -45,6 +45,8 @@ defmodule MusicLibraryWeb.Components.Release do @impl true def handle_async(:release_with_tracks, {:ok, {:ok, release}}, socket) do + notify_release_loaded(socket, release) + socket = socket |> assign( @@ -74,6 +76,13 @@ defmodule MusicLibraryWeb.Components.Release do )} end + defp notify_release_loaded(socket, release) do + case socket.assigns[:on_release_loaded] do + nil -> :ok + tag -> send(self(), {tag, release}) + end + end + defp apply_pending_form_params(socket) do case socket.assigns.pending_form_params do nil -> diff --git a/lib/music_library_web/live/scrobble_live/release_show.ex b/lib/music_library_web/live/scrobble_live/release_show.ex index 90a8646f..5996ab19 100644 --- a/lib/music_library_web/live/scrobble_live/release_show.ex +++ b/lib/music_library_web/live/scrobble_live/release_show.ex @@ -38,6 +38,7 @@ defmodule MusicLibraryWeb.ScrobbleLive.ReleaseShow do release_id={@release_id} show_print?={false} timezone={@timezone} + on_release_loaded={:release_loaded} /> """ @@ -62,4 +63,30 @@ defmodule MusicLibraryWeb.ScrobbleLive.ReleaseShow do |> assign(:rg_id, rg_id) |> assign(:release_id, release_id)} end + + @impl true + def handle_info({:release_loaded, release}, socket) do + {:noreply, assign(socket, :page_title, page_title(release))} + end + + defp page_title(release) do + Enum.join( + [ + artist_names(release), + "-", + release.title, + "·", + gettext("Release"), + "·", + gettext("Scrobble Anything") + ], + " " + ) + end + + defp artist_names(release) do + release.artists + |> Enum.map_join(fn artist -> artist.name <> (artist.joinphrase || "") end) + |> String.trim() + end end diff --git a/priv/gettext/default.pot b/priv/gettext/default.pot index 316f92ba..12943748 100644 --- a/priv/gettext/default.pot +++ b/priv/gettext/default.pot @@ -1290,6 +1290,7 @@ msgstr "" #: lib/music_library_web/components/layouts/app.html.heex #: lib/music_library_web/live/scrobble_live/index.ex #: lib/music_library_web/live/scrobble_live/release_group_show.ex +#: lib/music_library_web/live/scrobble_live/release_show.ex #, elixir-autogen, elixir-format msgid "Scrobble Anything" msgstr "" @@ -1437,6 +1438,7 @@ msgstr "" #: lib/music_library_web/components/release.ex #: lib/music_library_web/live/collection_live/index.ex +#: lib/music_library_web/live/scrobble_live/release_show.ex #: lib/music_library_web/live/wishlist_live/index.ex #, elixir-autogen, elixir-format msgid "Release" diff --git a/priv/gettext/en/LC_MESSAGES/default.po b/priv/gettext/en/LC_MESSAGES/default.po index 18794d80..b0716e06 100644 --- a/priv/gettext/en/LC_MESSAGES/default.po +++ b/priv/gettext/en/LC_MESSAGES/default.po @@ -1290,6 +1290,7 @@ msgstr "" #: lib/music_library_web/components/layouts/app.html.heex #: lib/music_library_web/live/scrobble_live/index.ex #: lib/music_library_web/live/scrobble_live/release_group_show.ex +#: lib/music_library_web/live/scrobble_live/release_show.ex #, elixir-autogen, elixir-format, fuzzy msgid "Scrobble Anything" msgstr "" @@ -1437,6 +1438,7 @@ msgstr "" #: lib/music_library_web/components/release.ex #: lib/music_library_web/live/collection_live/index.ex +#: lib/music_library_web/live/scrobble_live/release_show.ex #: lib/music_library_web/live/wishlist_live/index.ex #, elixir-autogen, elixir-format, fuzzy msgid "Release" diff --git a/test/music_library_web/live/scrobble_live/release_show_test.exs b/test/music_library_web/live/scrobble_live/release_show_test.exs index 7cdc125a..135f714c 100644 --- a/test/music_library_web/live/scrobble_live/release_show_test.exs +++ b/test/music_library_web/live/scrobble_live/release_show_test.exs @@ -42,5 +42,15 @@ defmodule MusicLibraryWeb.ScrobbleLive.ReleaseShowTest do |> visit(~p"/scrobble/#{@rg_id}/releases/#{@release_id}") |> assert_has("a[href='/scrobble/#{@rg_id}']", text: "Back to releases") end + + test "sets the page title once the release loads", %{conn: conn} do + {:ok, view, _html} = + Phoenix.LiveViewTest.live(conn, ~p"/scrobble/#{@rg_id}/releases/#{@release_id}") + + render_async(view) + + assert Phoenix.LiveViewTest.page_title(view) == + "Marillion - Marbles · Release · Scrobble Anything" + end end end