5
0
Fork 0
mirror of https://0xacab.org/sutty/sutty synced 2024-11-19 04:36:21 +00:00

feat: obtener el contenido del objeto más adelante

This commit is contained in:
f 2024-02-21 12:30:01 -03:00
parent fc7a524a85
commit 051d8c6d56
No known key found for this signature in database
3 changed files with 31 additions and 2 deletions

View file

@ -77,12 +77,17 @@ module Api
end
# 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]
def object
@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!
end
end

View 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

View file

@ -2,6 +2,7 @@
require 'distributed_press/v1/social/client'
require 'distributed_press/v1/social/hook'
require 'distributed_press/v1/social/dereferencer'
# Gestiona la Social Inbox de un sitio
class SocialInbox
@ -41,6 +42,11 @@ class SocialInbox
)
end
# @return [DistributedPress::V1::Social::Dereferencer]
def dereferencer
@dereferencer ||= DistributedPress::V1::Social::Dereferencer.new(client: client)
end
# @return [DistributedPress::V1::Social::Hook]
def hook
@hook ||= DistributedPress::V1::Social::Hook.new(client: client, actor: actor)