Take profile files into account when deleting orphan media
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
This commit is contained in:
parent
2b99b48258
commit
2154457be3
@ -74,7 +74,7 @@ defmodule Mobilizon.Service.CleanOrphanMedia do
|
|||||||
query
|
query
|
||||||
|> Repo.all(timeout: :infinity)
|
|> Repo.all(timeout: :infinity)
|
||||||
|> Enum.filter(fn %Media{file: %File{url: url}} ->
|
|> Enum.filter(fn %Media{file: %File{url: url}} ->
|
||||||
is_all_media_orphan?(url, expiration_date)
|
!url_is_also_a_profile_file?(url) && is_all_media_orphan?(url, expiration_date)
|
||||||
end)
|
end)
|
||||||
|> Enum.chunk_by(fn %Media{file: %File{url: url}} ->
|
|> Enum.chunk_by(fn %Media{file: %File{url: url}} ->
|
||||||
url
|
url
|
||||||
@ -91,7 +91,7 @@ defmodule Mobilizon.Service.CleanOrphanMedia do
|
|||||||
|
|
||||||
@spec is_media_orphan?(Media.t(), DateTime.t()) :: boolean()
|
@spec is_media_orphan?(Media.t(), DateTime.t()) :: boolean()
|
||||||
def is_media_orphan?(%Media{id: media_id}, expiration_date) do
|
def is_media_orphan?(%Media{id: media_id}, expiration_date) do
|
||||||
query =
|
media_query =
|
||||||
from(m in Media,
|
from(m in Media,
|
||||||
as: :media,
|
as: :media,
|
||||||
distinct: true,
|
distinct: true,
|
||||||
@ -103,6 +103,13 @@ defmodule Mobilizon.Service.CleanOrphanMedia do
|
|||||||
where: fragment(@union_query)
|
where: fragment(@union_query)
|
||||||
)
|
)
|
||||||
|
|
||||||
Repo.exists?(query)
|
Repo.exists?(media_query)
|
||||||
|
end
|
||||||
|
|
||||||
|
@spec url_is_also_a_profile_file?(String.t()) :: nil
|
||||||
|
defp url_is_also_a_profile_file?(url) when is_binary(url) do
|
||||||
|
Actor
|
||||||
|
|> where([a], fragment("avatar->>'url'") == ^url or fragment("banner->>'url'") == ^url)
|
||||||
|
|> Repo.exists?()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user