[Enhancement] Delete media after "x" days (#160)

* [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)
This commit is contained in:
Kieran
2024-04-03 10:44:11 -07:00
committed by GitHub
parent f9c2f7b8f2
commit 79c61bca4f
25 changed files with 576 additions and 171 deletions
+26
View File
@@ -17,6 +17,7 @@ defmodule Pinchflat.Media.MediaQuery do
# Prefixes:
# - for_* - belonging to a certain record
# - join_* - for joining on a certain record
# - with_* - for filtering based on full, concrete attributes
# - matching_* - for filtering based on partial attributes (e.g. LIKE, regex, full-text search)
#
@@ -31,6 +32,27 @@ defmodule Pinchflat.Media.MediaQuery do
where(query, [mi], mi.source_id == ^source.id)
end
def join_sources(query) do
from(mi in query, join: s in assoc(mi, :source), as: :sources)
end
def with_passed_retention_period(query) do
where(
query,
[mi, sources],
fragment(
"IFNULL(?, 0) > 0 AND DATETIME('now', '-' || ? || ' day') > ?",
sources.retention_period_days,
sources.retention_period_days,
mi.media_downloaded_at
)
)
end
def with_no_culling_prevention(query) do
where(query, [mi], mi.prevent_culling == false)
end
def with_id(query, id) do
where(query, [mi], mi.id == ^id)
end
@@ -53,6 +75,10 @@ defmodule Pinchflat.Media.MediaQuery do
where(query, [mi], mi.upload_date >= ^date)
end
def with_no_prevented_download(query) do
where(query, [mi], mi.prevent_download == false)
end
def matching_title_regex(query, nil), do: query
def matching_title_regex(query, regex) do