diff --git a/lib/music_library_web/components/release.ex b/lib/music_library_web/components/release.ex index 024b0399..01485b66 100644 --- a/lib/music_library_web/components/release.ex +++ b/lib/music_library_web/components/release.ex @@ -26,8 +26,8 @@ defmodule MusicLibraryWeb.Components.Release do socket |> assign(assigns) |> assign_async(:release_with_tracks, fn -> - with {:ok, release} <- MusicBrainz.get_release(record.selected_release_id) do - {:ok, %{release_with_tracks: MusicBrainz.Release.from_api_response(release)}} + with {:ok, release} <- load_release_with_tracks(record.selected_release_id) do + {:ok, %{release_with_tracks: release}} end end)} end @@ -104,6 +104,14 @@ defmodule MusicLibraryWeb.Components.Release do data-slot="icon" /> {gettext("Error loading tracks")} + <.button + variant="ghost" + size="xs" + phx-click={JS.push("load_release_tracks", target: @myself)} + class="ml-2 cursor-pointer" + > + {gettext("Retry")} + <.medium @@ -377,6 +385,24 @@ defmodule MusicLibraryWeb.Components.Release do {:noreply, socket} end + def handle_event("load_release_tracks", _params, socket) do + selected_release_id = socket.assigns.record.selected_release_id + + {:noreply, + socket + |> assign_async(:release_with_tracks, fn -> + with {:ok, release} <- load_release_with_tracks(selected_release_id) do + {:ok, %{release_with_tracks: release}} + end + end)} + end + + defp load_release_with_tracks(release_id) do + with {:ok, release} <- MusicBrainz.get_release(release_id) do + {:ok, MusicBrainz.Release.from_api_response(release)} + end + end + defp medium_selected?(medium, selected_tracks) do medium_track_ids = medium.tracks |> Enum.map(& &1.id) |> MapSet.new() MapSet.subset?(medium_track_ids, selected_tracks) diff --git a/priv/gettext/default.pot b/priv/gettext/default.pot index cb604d49..c67e3bfa 100644 --- a/priv/gettext/default.pot +++ b/priv/gettext/default.pot @@ -1958,3 +1958,8 @@ msgstr "" #, elixir-autogen, elixir-format msgid "Record sets" msgstr "" + +#: lib/music_library_web/components/release.ex +#, elixir-autogen, elixir-format +msgid "Retry" +msgstr "" diff --git a/priv/gettext/en/LC_MESSAGES/default.po b/priv/gettext/en/LC_MESSAGES/default.po index a46cf1c6..a7579766 100644 --- a/priv/gettext/en/LC_MESSAGES/default.po +++ b/priv/gettext/en/LC_MESSAGES/default.po @@ -1958,3 +1958,8 @@ msgstr "" #, elixir-autogen, elixir-format, fuzzy msgid "Record sets" msgstr "" + +#: lib/music_library_web/components/release.ex +#, elixir-autogen, elixir-format +msgid "Retry" +msgstr ""