diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/pleroma/activity.ex | 5 | ||||
| -rw-r--r-- | lib/pleroma/user.ex | 17 | ||||
| -rw-r--r-- | lib/pleroma/workers/purge_expired_activity.ex | 18 | 
3 files changed, 17 insertions, 23 deletions
| diff --git a/lib/pleroma/activity.ex b/lib/pleroma/activity.ex index 84aba9572..17af04257 100644 --- a/lib/pleroma/activity.ex +++ b/lib/pleroma/activity.ex @@ -343,9 +343,4 @@ defmodule Pleroma.Activity do      actor = user_actor(activity)      activity.id in actor.pinned_activities    end - -  @spec pinned_by_actor?(Activity.t(), User.t()) :: boolean() -  def pinned_by_actor?(%Activity{id: id}, %User{} = user) do -    id in user.pinned_activities -  end  end diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index f323fc6ed..e73d19964 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -2315,6 +2315,11 @@ defmodule Pleroma.User do        max_pinned_statuses = Config.get([:instance, :max_pinned_statuses], 0)        params = %{pinned_activities: user.pinned_activities ++ [id]} +      # if pinned activity was scheduled for deletion, we remove job +      if expiration = Pleroma.Workers.PurgeExpiredActivity.get_expiration(id) do +        Oban.cancel_job(expiration.id) +      end +        user        |> cast(params, [:pinned_activities])        |> validate_length(:pinned_activities, @@ -2327,9 +2332,19 @@ defmodule Pleroma.User do      |> update_and_set_cache()    end -  def remove_pinnned_activity(user, %Pleroma.Activity{id: id}) do +  def remove_pinnned_activity(user, %Pleroma.Activity{id: id, data: data}) do      params = %{pinned_activities: List.delete(user.pinned_activities, id)} +    # if pinned activity was scheduled for deletion, we reschedule it for deletion +    if data["expires_at"] do +      {:ok, expires_at, _} = DateTime.from_iso8601(data["expires_at"]) + +      Pleroma.Workers.PurgeExpiredActivity.enqueue(%{ +        activity_id: id, +        expires_at: expires_at +      }) +    end +      user      |> cast(params, [:pinned_activities])      |> update_and_set_cache() diff --git a/lib/pleroma/workers/purge_expired_activity.ex b/lib/pleroma/workers/purge_expired_activity.ex index 4be146194..f981eda8e 100644 --- a/lib/pleroma/workers/purge_expired_activity.ex +++ b/lib/pleroma/workers/purge_expired_activity.ex @@ -31,18 +31,8 @@ defmodule Pleroma.Workers.PurgeExpiredActivity do    @impl true    def perform(%Oban.Job{args: %{"activity_id" => id}}) do      with %Activity{} = activity <- find_activity(id), -         %Pleroma.User{} = user <- find_user(activity.object.data["actor"]), -         false <- pinned_by_actor?(activity, user) do +         %Pleroma.User{} = user <- find_user(activity.object.data["actor"]) do        Pleroma.Web.CommonAPI.delete(activity.id, user) -    else -      :pinned_by_actor -> -        # if activity is pinned, schedule deletion on next day -        enqueue(%{activity_id: id, expires_at: DateTime.add(DateTime.utc_now(), 24 * 3600)}) - -        :ok - -      error -> -        error      end    end @@ -74,12 +64,6 @@ defmodule Pleroma.Workers.PurgeExpiredActivity do      end    end -  defp pinned_by_actor?(activity, user) do -    with true <- Activity.pinned_by_actor?(activity, user) do -      :pinned_by_actor -    end -  end -    def get_expiration(id) do      from(j in Oban.Job,        where: j.state == "scheduled", | 
