79c61bca4f
* [Enhancement] Adds ability to stop media from re-downloading (#159) * Added column * Added methods for ignoring media items from future download * Added new deletion options to controller and UI * Added controller actions and UI for editing a media item * Added column to sources * Added retention period to form * [WIP] getting retention methods in place * Hooked up retention worker * Added column and UI to prevent automatic deletion * Docs * Removed unused backfill worker * Added edit links to media item tabs on source view * Clarified form wording * Form wording (again)
34 lines
891 B
Elixir
34 lines
891 B
Elixir
defmodule Pinchflat.Downloading.MediaRetentionWorker do
|
|
@moduledoc false
|
|
|
|
use Oban.Worker,
|
|
queue: :local_metadata,
|
|
unique: [period: :infinity, states: [:available, :scheduled, :retryable, :executing]],
|
|
tags: ["media_item", "local_metadata"]
|
|
|
|
require Logger
|
|
|
|
alias Pinchflat.Media
|
|
|
|
@doc """
|
|
Deletes media items that are past their retention date and prevents
|
|
them from being re-downloaded.
|
|
|
|
This worker is scheduled to run daily via the Oban Cron plugin.
|
|
|
|
Returns :ok
|
|
"""
|
|
@impl Oban.Worker
|
|
def perform(%Oban.Job{}) do
|
|
cullable_media = Media.list_cullable_media_items()
|
|
Logger.info("Culling #{length(cullable_media)} media items past their retention date")
|
|
|
|
Enum.each(cullable_media, fn media_item ->
|
|
Media.delete_media_files(media_item, %{
|
|
prevent_download: true,
|
|
culled_at: DateTime.utc_now()
|
|
})
|
|
end)
|
|
end
|
|
end
|