Refresh profiles in a background task
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
This commit is contained in:
@@ -32,9 +32,10 @@ defmodule Mobilizon.Federation.ActivityPub.Refresher do
|
||||
end
|
||||
|
||||
def refresh_profile(%Actor{type: type, url: url}) when type in [:Person, :Application] do
|
||||
with {:ok, %Actor{outbox_url: outbox_url}} <- ActivityPubActor.make_actor_from_url(url),
|
||||
with {:ok, %Actor{outbox_url: outbox_url} = actor} <-
|
||||
ActivityPubActor.make_actor_from_url(url),
|
||||
:ok <- fetch_collection(outbox_url, Relay.get_actor()) do
|
||||
:ok
|
||||
{:ok, actor}
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -12,9 +12,10 @@ defmodule Mobilizon.Federation.ActivityPub.Relay do
|
||||
alias Mobilizon.Actors.{Actor, Follower}
|
||||
|
||||
alias Mobilizon.Federation.ActivityPub
|
||||
alias Mobilizon.Federation.ActivityPub.{Activity, Refresher, Transmogrifier}
|
||||
alias Mobilizon.Federation.ActivityPub.{Activity, Transmogrifier}
|
||||
alias Mobilizon.Federation.ActivityPub.Actor, as: ActivityPubActor
|
||||
alias Mobilizon.Federation.WebFinger
|
||||
alias Mobilizon.Service.Workers.Background
|
||||
|
||||
alias Mobilizon.GraphQL.API.Follows
|
||||
|
||||
@@ -95,13 +96,16 @@ defmodule Mobilizon.Federation.ActivityPub.Relay do
|
||||
end
|
||||
end
|
||||
|
||||
@spec refresh(String.t()) :: {:ok, any()}
|
||||
def refresh(address) do
|
||||
Logger.debug("We're trying to refresh a remote instance")
|
||||
|
||||
with {:ok, target_instance} <- fetch_actor(address),
|
||||
{:ok, %Actor{} = target_actor} <-
|
||||
{:ok, %Actor{id: target_actor_id}} <-
|
||||
ActivityPubActor.get_or_fetch_actor_by_url(target_instance) do
|
||||
Refresher.refresh_profile(target_actor)
|
||||
Background.enqueue("refresh_profile", %{
|
||||
"actor_id" => target_actor_id
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -17,10 +17,11 @@ defmodule Mobilizon.Federation.ActivityPub.Transmogrifier do
|
||||
alias Mobilizon.Todos.{Todo, TodoList}
|
||||
|
||||
alias Mobilizon.Federation.ActivityPub
|
||||
alias Mobilizon.Federation.ActivityPub.{Activity, Refresher, Relay, Utils}
|
||||
alias Mobilizon.Federation.ActivityPub.{Activity, Relay, Utils}
|
||||
alias Mobilizon.Federation.ActivityPub.Actor, as: ActivityPubActor
|
||||
alias Mobilizon.Federation.ActivityPub.Types.Ownable
|
||||
alias Mobilizon.Federation.ActivityStream.{Converter, Convertible}
|
||||
alias Mobilizon.Service.Workers.Background
|
||||
alias Mobilizon.Tombstone
|
||||
alias Mobilizon.Web.Email.Participation
|
||||
alias Mobilizon.Web.Endpoint
|
||||
@@ -792,7 +793,9 @@ defmodule Mobilizon.Federation.ActivityPub.Transmogrifier do
|
||||
|
||||
# If this is an instance follow, refresh the followed profile (especially their outbox)
|
||||
if follower.id == relay_actor.id do
|
||||
Refresher.refresh_profile(followed)
|
||||
Background.enqueue("refresh_profile", %{
|
||||
"actor_id" => followed.id
|
||||
})
|
||||
end
|
||||
|
||||
{:ok, activity, follow}
|
||||
|
||||
Reference in New Issue
Block a user