Can barcode scan a wishlisted record and import it

This commit is contained in:
Claudio Ortolina
2025-02-19 15:47:09 +00:00
parent 818e8918ff
commit 4ca6421767
2 changed files with 20 additions and 14 deletions
@@ -30,7 +30,7 @@ defmodule MusicLibraryWeb.RecordLive.BarcodeScannerComponent do
<ul class="divide-y divide-zinc-100 dark:divide-slate-300/30 mt-5"> <ul class="divide-y divide-zinc-100 dark:divide-slate-300/30 mt-5">
<li <li
:for={{status, release} <- @releases} :for={{status, record_id, release} <- @releases}
id={release.id} id={release.id}
class="flex justify-between gap-x-6 py-5 hover:bg-zinc-50 dark:hover:bg-zinc-700" class="flex justify-between gap-x-6 py-5 hover:bg-zinc-50 dark:hover:bg-zinc-700"
phx-mounted={ phx-mounted={
@@ -41,7 +41,7 @@ defmodule MusicLibraryWeb.RecordLive.BarcodeScannerComponent do
) )
} }
> >
<.release status={status} release={release} /> <.release status={status} record_id={record_id} release={release} />
</li> </li>
</ul> </ul>
@@ -92,6 +92,7 @@ defmodule MusicLibraryWeb.RecordLive.BarcodeScannerComponent do
end end
attr :release, MusicBrainz.ReleaseSearchResult, required: true attr :release, MusicBrainz.ReleaseSearchResult, required: true
attr :record_id, :string
attr :status, :atom, required: true, values: [:collected, :wishlisted, :new] attr :status, :atom, required: true, values: [:collected, :wishlisted, :new]
defp release(assigns) do defp release(assigns) do
@@ -163,13 +164,18 @@ defmodule MusicLibraryWeb.RecordLive.BarcodeScannerComponent do
current_time = DateTime.utc_now() current_time = DateTime.utc_now()
# TODO: error handling when a release fails to import # TODO: error handling when a release fails to import
:ok = :ok =
Enum.each(socket.assigns.releases, fn {status, release} -> Enum.each(socket.assigns.releases, fn {status, record_id, release} ->
if status == :new do if status == :new do
Records.import_from_musicbrainz_release(release.id, Records.import_from_musicbrainz_release(release.id,
format: MusicBrainz.ReleaseSearchResult.format(release), format: MusicBrainz.ReleaseSearchResult.format(release),
purchased_at: current_time purchased_at: current_time
) )
end end
if status == :wishlisted do
record = Records.get_record!(record_id)
Records.update_record(record, %{"purchased_at" => current_time})
end
end) end)
qs = %{order: :purchase} qs = %{order: :purchase}
@@ -187,13 +193,13 @@ defmodule MusicLibraryWeb.RecordLive.BarcodeScannerComponent do
release_with_status = release_with_status =
case Records.get_release_status(release.id, format) do case Records.get_release_status(release.id, format) do
nil -> nil ->
{:new, release} {:new, nil, release}
%{record_id: _, purchased_at: nil} -> %{record_id: record_id, purchased_at: nil} ->
{:wishlisted, release} {:wishlisted, record_id, release}
_collected -> %{record_id: record_id} ->
{:collected, release} {:collected, record_id, release}
end end
assign(socket, :releases, [release_with_status | socket.assigns.releases]) assign(socket, :releases, [release_with_status | socket.assigns.releases])
+6 -6
View File
@@ -343,13 +343,13 @@ msgstr ""
msgid "Choose which format to import" msgid "Choose which format to import"
msgstr "" msgstr ""
#: lib/music_library_web/live/record_live/barcode_scanner_component.ex:115 #: lib/music_library_web/live/record_live/barcode_scanner_component.ex:116
#: lib/music_library_web/live/stats_live/index.html.heex:141 #: lib/music_library_web/live/stats_live/index.html.heex:141
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Collected" msgid "Collected"
msgstr "" msgstr ""
#: lib/music_library_web/live/record_live/barcode_scanner_component.ex:114 #: lib/music_library_web/live/record_live/barcode_scanner_component.ex:115
#: lib/music_library_web/live/stats_live/index.html.heex:147 #: lib/music_library_web/live/stats_live/index.html.heex:147
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Wishlisted" msgid "Wishlisted"
@@ -647,12 +647,12 @@ msgstr ""
msgid "Import releases" msgid "Import releases"
msgstr "" msgstr ""
#: lib/music_library_web/live/record_live/barcode_scanner_component.ex:155 #: lib/music_library_web/live/record_live/barcode_scanner_component.ex:156
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Failed to search release for barcode %{number}" msgid "Failed to search release for barcode %{number}"
msgstr "" msgstr ""
#: lib/music_library_web/live/record_live/barcode_scanner_component.ex:146 #: lib/music_library_web/live/record_live/barcode_scanner_component.ex:147
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "No release found for barcode %{number}" msgid "No release found for barcode %{number}"
msgstr "" msgstr ""
@@ -662,12 +662,12 @@ msgstr ""
msgid "Importing..." msgid "Importing..."
msgstr "" msgstr ""
#: lib/music_library_web/live/record_live/barcode_scanner_component.ex:180 #: lib/music_library_web/live/record_live/barcode_scanner_component.ex:186
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Records imported successfully" msgid "Records imported successfully"
msgstr "" msgstr ""
#: lib/music_library_web/live/record_live/barcode_scanner_component.ex:113 #: lib/music_library_web/live/record_live/barcode_scanner_component.ex:114
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "New" msgid "New"
msgstr "" msgstr ""