logo

pleroma

My custom branche(s) on git.pleroma.social/pleroma/pleroma

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