Enable edit/delete/import records in the wishlist
This commit is contained in:
@@ -124,7 +124,7 @@ defmodule MusicLibrary.Records do
|
|||||||
|
|
||||||
def import_from_musicbrainz(musicbrainz_id, opts \\ []) do
|
def import_from_musicbrainz(musicbrainz_id, opts \\ []) do
|
||||||
with format = Keyword.get(opts, :format, "cd"),
|
with format = Keyword.get(opts, :format, "cd"),
|
||||||
purchased_at = Keyword.get(opts, :purchased_at, DateTime.utc_now()),
|
purchased_at = Keyword.get(opts, :purchased_at),
|
||||||
{:ok, release_group} <- musicbrainz().get_release_group(musicbrainz_id),
|
{:ok, release_group} <- musicbrainz().get_release_group(musicbrainz_id),
|
||||||
{:ok, cover_data} <- musicbrainz().get_cover_art(musicbrainz_id),
|
{:ok, cover_data} <- musicbrainz().get_cover_art(musicbrainz_id),
|
||||||
record_params = build_record_params(release_group, cover_data, format, purchased_at) do
|
record_params = build_record_params(release_group, cover_data, format, purchased_at) do
|
||||||
|
|||||||
@@ -98,7 +98,12 @@ defmodule MusicLibraryWeb.RecordLive.Index do
|
|||||||
end
|
end
|
||||||
|
|
||||||
def handle_event("import", %{"id" => musicbrainz_id, "format" => format}, socket) do
|
def handle_event("import", %{"id" => musicbrainz_id, "format" => format}, socket) do
|
||||||
case Records.import_from_musicbrainz(musicbrainz_id, format: format) do
|
current_time = DateTime.utc_now()
|
||||||
|
|
||||||
|
case Records.import_from_musicbrainz(musicbrainz_id,
|
||||||
|
format: format,
|
||||||
|
purchased_at: current_time
|
||||||
|
) do
|
||||||
{:ok, record} ->
|
{:ok, record} ->
|
||||||
{:noreply,
|
{:noreply,
|
||||||
socket
|
socket
|
||||||
|
|||||||
@@ -28,6 +28,34 @@ defmodule MusicLibraryWeb.WishlistLive.Index do
|
|||||||
{:noreply, apply_action(socket, socket.assigns.live_action, params)}
|
{:noreply, apply_action(socket, socket.assigns.live_action, params)}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
defp apply_action(socket, :import, params) do
|
||||||
|
socket =
|
||||||
|
if get_in(socket.assigns, [:streams, :records]) == nil do
|
||||||
|
socket
|
||||||
|
|> apply_action(:index, params)
|
||||||
|
else
|
||||||
|
socket
|
||||||
|
end
|
||||||
|
|
||||||
|
socket
|
||||||
|
|> assign(:page_title, gettext("Import from MusicBrainz"))
|
||||||
|
|> assign(:record, nil)
|
||||||
|
end
|
||||||
|
|
||||||
|
defp apply_action(socket, :edit, params = %{"id" => id}) do
|
||||||
|
socket =
|
||||||
|
if get_in(socket.assigns, [:streams, :records]) == nil do
|
||||||
|
socket
|
||||||
|
|> apply_action(:index, params)
|
||||||
|
else
|
||||||
|
socket
|
||||||
|
end
|
||||||
|
|
||||||
|
socket
|
||||||
|
|> assign(:page_title, gettext("Edit"))
|
||||||
|
|> assign(:record, Records.get_record!(id))
|
||||||
|
end
|
||||||
|
|
||||||
defp apply_action(socket, :index, params) do
|
defp apply_action(socket, :index, params) do
|
||||||
query = params["query"] || ""
|
query = params["query"] || ""
|
||||||
total_records = Wishlist.search_records_count(query)
|
total_records = Wishlist.search_records_count(query)
|
||||||
@@ -53,6 +81,14 @@ defmodule MusicLibraryWeb.WishlistLive.Index do
|
|||||||
end
|
end
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
|
|
||||||
|
def handle_event("delete", %{"id" => id}, socket) do
|
||||||
|
record = Records.get_record!(id)
|
||||||
|
{:ok, _} = Records.delete_record(record)
|
||||||
|
|
||||||
|
{:noreply, stream_delete(socket, :records, record)}
|
||||||
|
end
|
||||||
|
|
||||||
def handle_event("search", %{"query" => query}, socket) do
|
def handle_event("search", %{"query" => query}, socket) do
|
||||||
qs =
|
qs =
|
||||||
@default_records_list_params
|
@default_records_list_params
|
||||||
@@ -63,6 +99,25 @@ defmodule MusicLibraryWeb.WishlistLive.Index do
|
|||||||
{:noreply, push_patch(socket, to: ~s"/wishlist?#{qs}")}
|
{:noreply, push_patch(socket, to: ~s"/wishlist?#{qs}")}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def handle_event("import", %{"id" => musicbrainz_id, "format" => format}, socket) do
|
||||||
|
case Records.import_from_musicbrainz(musicbrainz_id, format: format, purchased_at: nil) do
|
||||||
|
{:ok, record} ->
|
||||||
|
{:noreply,
|
||||||
|
socket
|
||||||
|
|> put_flash(:info, gettext("Record imported successfully"))
|
||||||
|
|> push_navigate(to: ~p"/wishlist/#{record.id}")}
|
||||||
|
|
||||||
|
{:error, %Ecto.Changeset{} = changeset} ->
|
||||||
|
{:noreply, assign(socket, form: to_form(changeset))}
|
||||||
|
|
||||||
|
{:error, reason} ->
|
||||||
|
{:noreply,
|
||||||
|
socket
|
||||||
|
|> put_flash(:error, gettext("Error importing record") <> "," <> inspect(reason))
|
||||||
|
|> push_patch(to: ~p"/wishlist")}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
defp merge_query(record_list_params, query) do
|
defp merge_query(record_list_params, query) do
|
||||||
Map.put(record_list_params, :query, query)
|
Map.put(record_list_params, :query, query)
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -39,7 +39,11 @@ defmodule MusicLibraryWeb.Router do
|
|||||||
live "/records/:id/show/edit", RecordLive.Show, :edit
|
live "/records/:id/show/edit", RecordLive.Show, :edit
|
||||||
|
|
||||||
live "/wishlist", WishlistLive.Index, :index
|
live "/wishlist", WishlistLive.Index, :index
|
||||||
|
live "/wishlist/import", WishlistLive.Index, :import
|
||||||
|
live "/wishlist/:id/edit", WishlistLive.Index, :edit
|
||||||
|
|
||||||
live "/wishlist/:id", WishlistLive.Show, :show
|
live "/wishlist/:id", WishlistLive.Show, :show
|
||||||
|
live "/wishlist/:id/show/edit", WishlistLive.Show, :edit
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user