[#1505] Background fetching of incoming activities' replies collections.

This commit is contained in:
Ivan Tashkinov 2020-01-25 10:47:30 +03:00
commit 86e4d23acb
5 changed files with 87 additions and 1 deletions

View file

@ -424,7 +424,13 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do
])
}
ActivityPub.create(params)
with {:ok, created_activity} <- ActivityPub.create(params) do
for reply_id <- replies(object) do
Pleroma.Workers.RemoteFetcherWorker.enqueue("fetch_remote", %{"id" => reply_id})
end
{:ok, created_activity}
end
else
%Activity{} = activity -> {:ok, activity}
_e -> :error
@ -946,6 +952,13 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do
Map.merge(obj, %{"replies" => replies_collection})
end
def replies(%{"replies" => replies = %{}}) do
replies = with %{} <- replies["first"], do: replies["first"], else: (_ -> replies)
replies["items"] || []
end
def replies(_), do: []
# Prepares the object of an outgoing create activity.
def prepare_object(object) do
object

View file

@ -0,0 +1,20 @@
# Pleroma: A lightweight social networking server
# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
# SPDX-License-Identifier: AGPL-3.0-only
defmodule Pleroma.Workers.RemoteFetcherWorker do
alias Pleroma.Object.Fetcher
use Pleroma.Workers.WorkerHelper, queue: "remote_fetcher"
@impl Oban.Worker
def perform(
%{
"op" => "fetch_remote",
"id" => id
},
_job
) do
Fetcher.fetch_object_from_id!(id)
end
end