diff --git a/lib/pinchflat_web/controllers/media_items/media_item_controller.ex b/lib/pinchflat_web/controllers/media_items/media_item_controller.ex
index 31a9ef4..2aac648 100644
--- a/lib/pinchflat_web/controllers/media_items/media_item_controller.ex
+++ b/lib/pinchflat_web/controllers/media_items/media_item_controller.ex
@@ -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
diff --git a/lib/pinchflat_web/controllers/media_items/media_item_html/show.html.heex b/lib/pinchflat_web/controllers/media_items/media_item_html/show.html.heex
index fb81b1a..d325f6f 100644
--- a/lib/pinchflat_web/controllers/media_items/media_item_html/show.html.heex
+++ b/lib/pinchflat_web/controllers/media_items/media_item_html/show.html.heex
@@ -4,7 +4,7 @@
<.icon name="hero-arrow-left" class="w-10 h-10 hover:dark:text-white" />
- Media Item #<%= @media_item.id %>
+ <%= StringUtils.truncate(@media_item.title, 35) %>
@@ -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
+ <: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
+
+
@@ -32,6 +41,7 @@
<.media_preview media_item={@media_item} />
<% end %>
+ <%= @media_item.title %>
Attributes
Source:
diff --git a/test/pinchflat_web/controllers/media_item_controller_test.exs b/test/pinchflat_web/controllers/media_item_controller_test.exs
index 428d337..c1beed0 100644
--- a/test/pinchflat_web/controllers/media_item_controller_test.exs
+++ b/test/pinchflat_web/controllers/media_item_controller_test.exs
@@ -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