5
0
Fork 0
mirror of https://0xacab.org/sutty/sutty synced 2024-11-22 05:26:22 +00:00

feat: guardar la mención de le autore

This commit is contained in:
f 2024-03-16 17:53:29 -03:00
parent f6b2895b58
commit b972e53e48
No known key found for this signature in database
3 changed files with 36 additions and 4 deletions

View file

@ -29,8 +29,13 @@ class ActivityPub
object.update(content: content, type: ActivityPub::Object.type_from(content).name) object.update(content: content, type: ActivityPub::Object.type_from(content).name)
return if current_type == object.type
object = ::ActivityPub::Object.find(object_id)
object.actor.save if object.actor_type?
# Arreglar las relaciones con actividades también # Arreglar las relaciones con actividades también
ActivityPub.where(object_id: object.id).update_all(object_type: object.type) unless current_type == object.type ActivityPub.where(object_id: object.id).update_all(object_type: object.type)
rescue FastJsonparser::ParseError => e rescue FastJsonparser::ParseError => e
ExceptionNotifier.notify_exception(e, data: { site: site.name, body: response.body }) ExceptionNotifier.notify_exception(e, data: { site: site.name, body: response.body })
end end

View file

@ -18,19 +18,22 @@ class ActivityPub
# Les actores son únicxs a toda la base de datos # Les actores son únicxs a toda la base de datos
validates :uri, presence: true, url: true, uniqueness: true validates :uri, presence: true, url: true, uniqueness: true
before_save :mentionize!
# Obtiene el nombre de la Actor como mención, solo si obtuvimos el # Obtiene el nombre de la Actor como mención, solo si obtuvimos el
# contenido de antemano. # contenido de antemano.
# #
# @return [String, nil] # @return [String, nil]
def mention def mentionize!
return if mention.present?
return if content['preferredUsername'].blank? return if content['preferredUsername'].blank?
return if instance.blank? return if instance.blank?
@mention ||= "@#{content['preferredUsername']}@#{instance.hostname}" self.mention ||= "@#{content['preferredUsername']}@#{instance.hostname}"
end end
def object def object
@object ||= ActivityPub::Object::Person.find_or_initialize_by(uri: uri) @object ||= ActivityPub::Object.find_or_initialize_by(uri: uri)
end end
def content def content

View file

@ -0,0 +1,24 @@
# frozen_string_literal: true
# Guarda la mención en la tabla de actores
class AddMentionToActors < ActiveRecord::Migration[6.1]
def up
add_column :activity_pub_actors, :mention, :string, null: true
actor_types = %w[
ActivityPub::Object::Application
ActivityPub::Object::Group
ActivityPub::Object::Organization
ActivityPub::Object::Person
ActivityPub::Object::Service
]
ActivityPub::Object.where(type: actor_types).where.not(content: {}).find_each do |object|
ActivityPub::Actor.find_by_uri(object.uri)&.save
end
end
def down
remove_column :activity_pub_actors, :mention
end
end