diff --git a/.claude/settings.local.json b/.claude/settings.local.json index 64a93a8b..8ed703ad 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -46,7 +46,8 @@ "Bash(ls:*)", "WebFetch(domain:raw.githubusercontent.com)", "WebFetch(domain:github.com)", - "WebFetch(domain:hex.pm)" + "WebFetch(domain:hex.pm)", + "Bash(gh issue:*)" ] }, "enableAllProjectMcpServers": false diff --git a/lib/music_library_web/components/record_form.ex b/lib/music_library_web/components/record_form.ex index b139e15d..6dc862c7 100644 --- a/lib/music_library_web/components/record_form.ex +++ b/lib/music_library_web/components/record_form.ex @@ -583,27 +583,29 @@ defmodule MusicLibraryWeb.Components.RecordForm do end defp save_record(socket, record_params, uploaded_covers) do - params = - case uploaded_covers do - [] -> - record_params - - [cover_params] -> - {:ok, asset} = Assets.store_image(cover_params) - Map.put(record_params, "cover_hash", asset.hash) - end - - case Records.update_record(socket.assigns.record, params) do - {:ok, record} -> - notify_parent({:saved, record}) - - {:noreply, - socket - |> put_toast(:info, gettext("Record updated successfully")) - |> push_patch(to: socket.assigns.patch)} + with {:ok, params} <- maybe_store_uploaded_cover(record_params, uploaded_covers), + {:ok, record} <- Records.update_record(socket.assigns.record, params) do + notify_parent({:saved, record}) + {:noreply, + socket + |> put_toast(:info, gettext("Record updated successfully")) + |> push_patch(to: socket.assigns.patch)} + else {:error, %Ecto.Changeset{} = changeset} -> {:noreply, assign(socket, form: to_form(changeset))} + + {:error, _reason} -> + {:noreply, put_toast(socket, :error, gettext("Failed to store cover image"))} + end + end + + defp maybe_store_uploaded_cover(params, []), do: {:ok, params} + + defp maybe_store_uploaded_cover(params, [cover_params]) do + case Assets.store_image(cover_params) do + {:ok, asset} -> {:ok, Map.put(params, "cover_hash", asset.hash)} + {:error, reason} -> {:error, reason} end end diff --git a/lib/music_library_web/live/artist_live/form.ex b/lib/music_library_web/live/artist_live/form.ex index dcb27164..a2218842 100644 --- a/lib/music_library_web/live/artist_live/form.ex +++ b/lib/music_library_web/live/artist_live/form.ex @@ -294,27 +294,29 @@ defmodule MusicLibraryWeb.ArtistLive.Form do end defp save_artist_info(socket, artist_info_params, uploaded_images) do - params = - case uploaded_images do - [] -> - artist_info_params - - [image_params] -> - {:ok, asset} = Assets.store_image(image_params) - Map.put(artist_info_params, "image_data_hash", asset.hash) - end - - case Artists.update_artist_info(socket.assigns.artist_info, params) do - {:ok, artist_info} -> - notify_parent({:saved, artist_info}) - - {:noreply, - socket - |> put_toast(:info, gettext("Artist updated successfully")) - |> push_patch(to: socket.assigns.patch)} + with {:ok, params} <- maybe_store_uploaded_image(artist_info_params, uploaded_images), + {:ok, artist_info} <- Artists.update_artist_info(socket.assigns.artist_info, params) do + notify_parent({:saved, artist_info}) + {:noreply, + socket + |> put_toast(:info, gettext("Artist updated successfully")) + |> push_patch(to: socket.assigns.patch)} + else {:error, %Ecto.Changeset{} = changeset} -> {:noreply, assign(socket, form: to_form(changeset))} + + {:error, _reason} -> + {:noreply, put_toast(socket, :error, gettext("Failed to store artist image"))} + end + end + + defp maybe_store_uploaded_image(params, []), do: {:ok, params} + + defp maybe_store_uploaded_image(params, [image_params]) do + case Assets.store_image(image_params) do + {:ok, asset} -> {:ok, Map.put(params, "image_data_hash", asset.hash)} + {:error, reason} -> {:error, reason} end end diff --git a/priv/gettext/default.pot b/priv/gettext/default.pot index 22741979..92b6b12d 100644 --- a/priv/gettext/default.pot +++ b/priv/gettext/default.pot @@ -2053,3 +2053,13 @@ msgstr "" #, elixir-autogen, elixir-format msgid "Refresh Last.fm data" msgstr "" + +#: lib/music_library_web/live/artist_live/form.ex +#, elixir-autogen, elixir-format +msgid "Failed to store artist image" +msgstr "" + +#: lib/music_library_web/components/record_form.ex +#, elixir-autogen, elixir-format +msgid "Failed to store cover image" +msgstr "" diff --git a/priv/gettext/en/LC_MESSAGES/default.po b/priv/gettext/en/LC_MESSAGES/default.po index d9410928..959df129 100644 --- a/priv/gettext/en/LC_MESSAGES/default.po +++ b/priv/gettext/en/LC_MESSAGES/default.po @@ -2053,3 +2053,13 @@ msgstr "" #, elixir-autogen, elixir-format, fuzzy msgid "Refresh Last.fm data" msgstr "" + +#: lib/music_library_web/live/artist_live/form.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Failed to store artist image" +msgstr "" + +#: lib/music_library_web/components/record_form.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Failed to store cover image" +msgstr ""