Added new deletion options to controller and UI

This commit is contained in:
Kieran Eglin 2024-04-02 14:38:24 -07:00
parent 2993c33e36
commit 6e0bdee5b6
No known key found for this signature in database
GPG key ID: 193984967FCF432D
3 changed files with 32 additions and 38 deletions

View file

@ -17,19 +17,12 @@ defmodule PinchflatWeb.MediaItems.MediaItemController do
end
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)
{:ok, _} = Media.delete_media_item(media_item, delete_files: delete_files)
flash_message =
if delete_files do
"Record and files deleted successfully."
else
"Record deleted successfully. Files were not deleted."
end
{:ok, _} = Media.delete_media_files(media_item, prevent_download: prevent_download)
conn
|> put_flash(:info, flash_message)
|> put_flash(:info, "Files deleted successfully.")
|> redirect(to: ~p"/sources/#{media_item.source_id}")
end

View file

@ -4,7 +4,7 @@
<.icon name="hero-arrow-left" class="w-10 h-10 hover:dark:text-white" />
</.link>
<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>
</div>
</div>
@ -15,13 +15,22 @@
<.button_dropdown text="Actions" class="justify-center w-full sm:w-50">
<:option>
<.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"
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
</.link>
</: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>
</:tab_append>
@ -32,6 +41,7 @@
<.media_preview media_item={@media_item} />
<% end %>
<h2 class="font-bold text-2xl"><%= @media_item.title %></h2>
<h3 class="font-bold text-xl">Attributes</h3>
<section>
<strong>Source:</strong>

View file

@ -10,27 +10,28 @@ defmodule PinchflatWeb.MediaItemControllerTest do
test "renders the page", %{conn: conn, media_item: media_item} do
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
describe "delete media when just deleting the records" do
describe "delete media" do
setup do
media_item = media_item_with_attachments()
%{media_item: media_item}
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}")
assert_raise Ecto.NoResultsError, fn -> Repo.reload!(media_item) end
assert Repo.reload!(media_item)
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}")
assert File.exists?(media_item.media_filepath)
refute File.exists?(media_item.media_filepath)
end
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}"
end
end
describe "delete media when deleting the records and files" do
setup do
media_item = media_item_with_attachments()
test "doesn't prevent re-download by default", %{conn: conn, media_item: media_item} do
delete(conn, ~p"/sources/#{media_item.source_id}/media/#{media_item.id}")
%{media_item: media_item}
media_item = Repo.reload(media_item)
refute media_item.prevent_download
end
test "the media item is deleted", %{conn: conn, media_item: media_item} do
delete(conn, ~p"/sources/#{media_item.source_id}/media/#{media_item.id}?delete_files=true")
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}?prevent_download=true")
assert_raise Ecto.NoResultsError, fn -> Repo.reload!(media_item) end
end
media_item = Repo.reload(media_item)
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_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}"
assert media_item.prevent_download
end
end