Gracefully handle duplicate enqueued downloads

This commit is contained in:
Kieran Eglin 2024-04-16 17:07:58 -07:00
parent 32d29b0209
commit 853173e30a
No known key found for this signature in database
GPG key ID: 193984967FCF432D
2 changed files with 16 additions and 1 deletions

View file

@ -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.")

View file

@ -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})