mirror of
https://0xacab.org/sutty/sutty
synced 2024-11-19 08:36:22 +00:00
feat: obtener el contenido del objeto más adelante
This commit is contained in:
parent
fc7a524a85
commit
051d8c6d56
3 changed files with 31 additions and 2 deletions
|
@ -77,12 +77,17 @@ module Api
|
||||||
end
|
end
|
||||||
|
|
||||||
# Genera un objeto a partir de la actividad. Si el objeto ya
|
# Genera un objeto a partir de la actividad. Si el objeto ya
|
||||||
# existe, actualiza su contenido.
|
# existe, actualiza su contenido. Si el objeto no viene
|
||||||
|
# incorporado, obtenemos el contenido más tarde.
|
||||||
#
|
#
|
||||||
# @return [ActivityPub::Object]
|
# @return [ActivityPub::Object]
|
||||||
def object
|
def object
|
||||||
@object ||= ActivityPub::Object.type_from(original_object).find_or_initialize_by(actor: actor, uri: object_uri).tap do |o|
|
@object ||= ActivityPub::Object.type_from(original_object).find_or_initialize_by(actor: actor, uri: object_uri).tap do |o|
|
||||||
o.content = original_object if object_embedded?
|
if object_embedded?
|
||||||
|
o.content = original_object
|
||||||
|
else
|
||||||
|
ActivityPub::FetchJob.perform_later(site: site, object: object)
|
||||||
|
end
|
||||||
o.save!
|
o.save!
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
18
app/jobs/activity_pub/fetch_job.rb
Normal file
18
app/jobs/activity_pub/fetch_job.rb
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
# Obtiene o actualiza el contenido de un objeto, usando las credenciales
|
||||||
|
# del sitio.
|
||||||
|
#
|
||||||
|
# XXX: Esto usa las credenciales del sitio para volver el objeto
|
||||||
|
# disponible para todo el CMS. Asumimos que el objeto devuelto es el
|
||||||
|
# mismo para todo el mundo y las credenciales solo son para
|
||||||
|
# autenticación.
|
||||||
|
class ActivityPub::FetchJob < ApplicationJob
|
||||||
|
def perform(site:, object:)
|
||||||
|
ActivityPub::Object.transaction do
|
||||||
|
response = site.social_inbox.dereferencer.get(uri: object.uri)
|
||||||
|
|
||||||
|
object.update(content: FastJsonparser.parse(response.body)) if response.ok?
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
require 'distributed_press/v1/social/client'
|
require 'distributed_press/v1/social/client'
|
||||||
require 'distributed_press/v1/social/hook'
|
require 'distributed_press/v1/social/hook'
|
||||||
|
require 'distributed_press/v1/social/dereferencer'
|
||||||
|
|
||||||
# Gestiona la Social Inbox de un sitio
|
# Gestiona la Social Inbox de un sitio
|
||||||
class SocialInbox
|
class SocialInbox
|
||||||
|
@ -41,6 +42,11 @@ class SocialInbox
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# @return [DistributedPress::V1::Social::Dereferencer]
|
||||||
|
def dereferencer
|
||||||
|
@dereferencer ||= DistributedPress::V1::Social::Dereferencer.new(client: client)
|
||||||
|
end
|
||||||
|
|
||||||
# @return [DistributedPress::V1::Social::Hook]
|
# @return [DistributedPress::V1::Social::Hook]
|
||||||
def hook
|
def hook
|
||||||
@hook ||= DistributedPress::V1::Social::Hook.new(client: client, actor: actor)
|
@hook ||= DistributedPress::V1::Social::Hook.new(client: client, actor: actor)
|
||||||
|
|
Loading…
Reference in a new issue