From 853173e30afe070a796d802a137505781ba057e9 Mon Sep 17 00:00:00 2001 From: Kieran Eglin Date: Tue, 16 Apr 2024 17:07:58 -0700 Subject: [PATCH] Gracefully handle duplicate enqueued downloads --- .../controllers/media_items/media_item_controller.ex | 8 +++++++- .../controllers/media_item_controller_test.exs | 9 +++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) 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 d348fee..278ef23 100644 --- a/lib/pinchflat_web/controllers/media_items/media_item_controller.ex +++ b/lib/pinchflat_web/controllers/media_items/media_item_controller.ex @@ -50,7 +50,13 @@ defmodule PinchflatWeb.MediaItems.MediaItemController do def force_download(conn, %{"media_item_id" => id}) do media_item = Media.get_media_item!(id) - {:ok, _} = MediaDownloadWorker.kickoff_with_task(media_item, %{force: true}) + + :ok = + case MediaDownloadWorker.kickoff_with_task(media_item, %{force: true}) do + {:ok, _} -> :ok + {:error, :duplicate_job} -> :ok + err -> err + end conn |> put_flash(:info, "Download task enqueued.") diff --git a/test/pinchflat_web/controllers/media_item_controller_test.exs b/test/pinchflat_web/controllers/media_item_controller_test.exs index b0c8847..5a2dbd9 100644 --- a/test/pinchflat_web/controllers/media_item_controller_test.exs +++ b/test/pinchflat_web/controllers/media_item_controller_test.exs @@ -97,6 +97,15 @@ defmodule PinchflatWeb.MediaItemControllerTest do assert [_] = all_enqueued(worker: MediaDownloadWorker) end + test "doesn't freak out if the task is a duplicate", %{conn: conn} do + media_item = media_item_fixture() + + MediaDownloadWorker.kickoff_with_task(media_item, %{force: true}) + + post(conn, ~p"/sources/#{media_item.source_id}/media/#{media_item.id}/force_download") + assert [_] = all_enqueued(worker: MediaDownloadWorker) + end + test "forces a download even if one wouldn't normally run", %{conn: conn} do media_item = media_item_fixture(%{media_filepath: nil})