From 2154457be39a3c0c72385087aac048ec10501290 Mon Sep 17 00:00:00 2001 From: Thomas Citharel Date: Sat, 20 Nov 2021 18:30:51 +0100 Subject: [PATCH] Take profile files into account when deleting orphan media Signed-off-by: Thomas Citharel --- lib/service/clean_orphan_media.ex | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/lib/service/clean_orphan_media.ex b/lib/service/clean_orphan_media.ex index fd619bee2..136815eb0 100644 --- a/lib/service/clean_orphan_media.ex +++ b/lib/service/clean_orphan_media.ex @@ -74,7 +74,7 @@ defmodule Mobilizon.Service.CleanOrphanMedia do query |> Repo.all(timeout: :infinity) |> 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) |> Enum.chunk_by(fn %Media{file: %File{url: url}} -> url @@ -91,7 +91,7 @@ defmodule Mobilizon.Service.CleanOrphanMedia do @spec is_media_orphan?(Media.t(), DateTime.t()) :: boolean() def is_media_orphan?(%Media{id: media_id}, expiration_date) do - query = + media_query = from(m in Media, as: :media, distinct: true, @@ -103,6 +103,13 @@ defmodule Mobilizon.Service.CleanOrphanMedia do 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