purge_expired_activities_worker.ex (1385B)
1 # Pleroma: A lightweight social networking server 2 # Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/> 3 # SPDX-License-Identifier: AGPL-3.0-only 4 5 defmodule Pleroma.Workers.Cron.PurgeExpiredActivitiesWorker do 6 @moduledoc """ 7 The worker to purge expired activities. 8 """ 9 10 use Oban.Worker, queue: "activity_expiration" 11 12 alias Pleroma.Activity 13 alias Pleroma.ActivityExpiration 14 alias Pleroma.Config 15 alias Pleroma.User 16 alias Pleroma.Web.CommonAPI 17 18 require Logger 19 20 @interval :timer.minutes(1) 21 22 @impl Oban.Worker 23 def perform(_job) do 24 if Config.get([ActivityExpiration, :enabled]) do 25 Enum.each(ActivityExpiration.due_expirations(@interval), &delete_activity/1) 26 end 27 after 28 :ok 29 end 30 31 def delete_activity(%ActivityExpiration{activity_id: activity_id}) do 32 with {:activity, %Activity{} = activity} <- 33 {:activity, Activity.get_by_id_with_object(activity_id)}, 34 {:user, %User{} = user} <- {:user, User.get_by_ap_id(activity.object.data["actor"])} do 35 CommonAPI.delete(activity.id, user) 36 else 37 {:activity, _} -> 38 Logger.error( 39 "#{__MODULE__} Couldn't delete expired activity: not found activity ##{activity_id}" 40 ) 41 42 {:user, _} -> 43 Logger.error( 44 "#{__MODULE__} Couldn't delete expired activity: not found actor of ##{activity_id}" 45 ) 46 end 47 end 48 end