Can barcode scan a wishlisted record and import it
This commit is contained in:
@@ -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])
|
||||||
|
|||||||
@@ -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 ""
|
||||||
|
|||||||
Reference in New Issue
Block a user