Added new deletion options to controller and UI
This commit is contained in:
parent
2993c33e36
commit
6e0bdee5b6
3 changed files with 32 additions and 38 deletions
|
|
@ -17,19 +17,12 @@ defmodule PinchflatWeb.MediaItems.MediaItemController do
|
||||||
end
|
end
|
||||||
|
|
||||||
def delete(conn, %{"id" => id} = params) do
|
def delete(conn, %{"id" => id} = params) do
|
||||||
delete_files = Map.get(params, "delete_files", false)
|
prevent_download = Map.get(params, "prevent_download", false)
|
||||||
media_item = Media.get_media_item!(id)
|
media_item = Media.get_media_item!(id)
|
||||||
{:ok, _} = Media.delete_media_item(media_item, delete_files: delete_files)
|
{:ok, _} = Media.delete_media_files(media_item, prevent_download: prevent_download)
|
||||||
|
|
||||||
flash_message =
|
|
||||||
if delete_files do
|
|
||||||
"Record and files deleted successfully."
|
|
||||||
else
|
|
||||||
"Record deleted successfully. Files were not deleted."
|
|
||||||
end
|
|
||||||
|
|
||||||
conn
|
conn
|
||||||
|> put_flash(:info, flash_message)
|
|> put_flash(:info, "Files deleted successfully.")
|
||||||
|> redirect(to: ~p"/sources/#{media_item.source_id}")
|
|> redirect(to: ~p"/sources/#{media_item.source_id}")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@
|
||||||
<.icon name="hero-arrow-left" class="w-10 h-10 hover:dark:text-white" />
|
<.icon name="hero-arrow-left" class="w-10 h-10 hover:dark:text-white" />
|
||||||
</.link>
|
</.link>
|
||||||
<h2 class="text-title-md2 font-bold text-black dark:text-white ml-4">
|
<h2 class="text-title-md2 font-bold text-black dark:text-white ml-4">
|
||||||
Media Item #<%= @media_item.id %>
|
<%= StringUtils.truncate(@media_item.title, 35) %>
|
||||||
</h2>
|
</h2>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -15,13 +15,22 @@
|
||||||
<.button_dropdown text="Actions" class="justify-center w-full sm:w-50">
|
<.button_dropdown text="Actions" class="justify-center w-full sm:w-50">
|
||||||
<:option>
|
<:option>
|
||||||
<.link
|
<.link
|
||||||
href={~p"/sources/#{@media_item.source_id}/media/#{@media_item}?delete_files=true"}
|
href={~p"/sources/#{@media_item.source_id}/media/#{@media_item}"}
|
||||||
method="delete"
|
method="delete"
|
||||||
data-confirm="Are you sure you want to delete this record and all associated files on disk? This cannot be undone."
|
data-confirm="Are you sure you want to delete all files for this media item? This cannot be undone."
|
||||||
>
|
>
|
||||||
Delete Files
|
Delete Files
|
||||||
</.link>
|
</.link>
|
||||||
</:option>
|
</:option>
|
||||||
|
<:option>
|
||||||
|
<.link
|
||||||
|
href={~p"/sources/#{@media_item.source_id}/media/#{@media_item}?prevent_download=true"}
|
||||||
|
method="delete"
|
||||||
|
data-confirm="Are you sure you want to delete all files for this media item and prevent it from re-downloading in the future? This cannot be undone."
|
||||||
|
>
|
||||||
|
Delete and Ignore
|
||||||
|
</.link>
|
||||||
|
</:option>
|
||||||
</.button_dropdown>
|
</.button_dropdown>
|
||||||
</:tab_append>
|
</:tab_append>
|
||||||
|
|
||||||
|
|
@ -32,6 +41,7 @@
|
||||||
<.media_preview media_item={@media_item} />
|
<.media_preview media_item={@media_item} />
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
|
<h2 class="font-bold text-2xl"><%= @media_item.title %></h2>
|
||||||
<h3 class="font-bold text-xl">Attributes</h3>
|
<h3 class="font-bold text-xl">Attributes</h3>
|
||||||
<section>
|
<section>
|
||||||
<strong>Source:</strong>
|
<strong>Source:</strong>
|
||||||
|
|
|
||||||
|
|
@ -10,27 +10,28 @@ defmodule PinchflatWeb.MediaItemControllerTest do
|
||||||
|
|
||||||
test "renders the page", %{conn: conn, media_item: media_item} do
|
test "renders the page", %{conn: conn, media_item: media_item} do
|
||||||
conn = get(conn, ~p"/sources/#{media_item.source_id}/media/#{media_item}")
|
conn = get(conn, ~p"/sources/#{media_item.source_id}/media/#{media_item}")
|
||||||
assert html_response(conn, 200) =~ "Media Item ##{media_item.id}"
|
|
||||||
|
assert html_response(conn, 200) =~ "#{media_item.title}"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "delete media when just deleting the records" do
|
describe "delete media" do
|
||||||
setup do
|
setup do
|
||||||
media_item = media_item_with_attachments()
|
media_item = media_item_with_attachments()
|
||||||
|
|
||||||
%{media_item: media_item}
|
%{media_item: media_item}
|
||||||
end
|
end
|
||||||
|
|
||||||
test "the media item is deleted", %{conn: conn, media_item: media_item} do
|
test "the media item not is deleted", %{conn: conn, media_item: media_item} do
|
||||||
delete(conn, ~p"/sources/#{media_item.source_id}/media/#{media_item.id}")
|
delete(conn, ~p"/sources/#{media_item.source_id}/media/#{media_item.id}")
|
||||||
|
|
||||||
assert_raise Ecto.NoResultsError, fn -> Repo.reload!(media_item) end
|
assert Repo.reload!(media_item)
|
||||||
end
|
end
|
||||||
|
|
||||||
test "the files are not deleted", %{conn: conn, media_item: media_item} do
|
test "the files are deleted", %{conn: conn, media_item: media_item} do
|
||||||
delete(conn, ~p"/sources/#{media_item.source_id}/media/#{media_item.id}")
|
delete(conn, ~p"/sources/#{media_item.source_id}/media/#{media_item.id}")
|
||||||
|
|
||||||
assert File.exists?(media_item.media_filepath)
|
refute File.exists?(media_item.media_filepath)
|
||||||
end
|
end
|
||||||
|
|
||||||
test "redirects to the source page", %{conn: conn, media_item: media_item} do
|
test "redirects to the source page", %{conn: conn, media_item: media_item} do
|
||||||
|
|
@ -38,31 +39,21 @@ defmodule PinchflatWeb.MediaItemControllerTest do
|
||||||
|
|
||||||
assert redirected_to(conn) == ~p"/sources/#{media_item.source_id}"
|
assert redirected_to(conn) == ~p"/sources/#{media_item.source_id}"
|
||||||
end
|
end
|
||||||
end
|
|
||||||
|
|
||||||
describe "delete media when deleting the records and files" do
|
test "doesn't prevent re-download by default", %{conn: conn, media_item: media_item} do
|
||||||
setup do
|
delete(conn, ~p"/sources/#{media_item.source_id}/media/#{media_item.id}")
|
||||||
media_item = media_item_with_attachments()
|
|
||||||
|
|
||||||
%{media_item: media_item}
|
media_item = Repo.reload(media_item)
|
||||||
|
|
||||||
|
refute media_item.prevent_download
|
||||||
end
|
end
|
||||||
|
|
||||||
test "the media item is deleted", %{conn: conn, media_item: media_item} do
|
test "can optionally prevent re-download", %{conn: conn, media_item: media_item} do
|
||||||
delete(conn, ~p"/sources/#{media_item.source_id}/media/#{media_item.id}?delete_files=true")
|
delete(conn, ~p"/sources/#{media_item.source_id}/media/#{media_item.id}?prevent_download=true")
|
||||||
|
|
||||||
assert_raise Ecto.NoResultsError, fn -> Repo.reload!(media_item) end
|
media_item = Repo.reload(media_item)
|
||||||
end
|
|
||||||
|
|
||||||
test "the files are deleted", %{conn: conn, media_item: media_item} do
|
assert media_item.prevent_download
|
||||||
delete(conn, ~p"/sources/#{media_item.source_id}/media/#{media_item.id}?delete_files=true")
|
|
||||||
|
|
||||||
refute File.exists?(media_item.media_filepath)
|
|
||||||
end
|
|
||||||
|
|
||||||
test "redirects to the source page", %{conn: conn, media_item: media_item} do
|
|
||||||
conn = delete(conn, ~p"/sources/#{media_item.source_id}/media/#{media_item.id}?delete_files=true")
|
|
||||||
|
|
||||||
assert redirected_to(conn) == ~p"/sources/#{media_item.source_id}"
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue