Add _:inReplyToAtomUri to ActivityPub (#4702)

main
Eugen Rochko 2017-08-26 19:55:10 +02:00 committed by GitHub
parent 0397c58b61
commit 0d5d11eeff
4 changed files with 27 additions and 5 deletions

View File

@ -10,7 +10,7 @@ module JsonLdHelper
end end
def value_or_id(value) def value_or_id(value)
value.is_a?(String) ? value : value['id'] value.is_a?(String) || value.nil? ? value : value['id']
end end
def supported_context?(json) def supported_context?(json)

View File

@ -91,7 +91,7 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
def resolve_thread(status) def resolve_thread(status)
return unless status.reply? && status.thread.nil? return unless status.reply? && status.thread.nil?
ThreadResolveWorker.perform_async(status.id, @object['inReplyTo']) ThreadResolveWorker.perform_async(status.id, in_reply_to_uri)
end end
def conversation_from_uri(uri) def conversation_from_uri(uri)
@ -118,8 +118,19 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
end end
def replied_to_status def replied_to_status
return if @object['inReplyTo'].blank? return @replied_to_status if defined?(@replied_to_status)
@replied_to_status ||= status_from_uri(@object['inReplyTo'])
if in_reply_to_uri.blank?
@replied_to_status = nil
else
@replied_to_status = status_from_uri(in_reply_to_uri)
@replied_to_status ||= status_from_uri(@object['_:inReplyToAtomUri']) if @object['_:inReplyToAtomUri'].present?
@replied_to_status
end
end
def in_reply_to_uri
value_or_id(@object['inReplyTo'])
end end
def text_from_content def text_from_content

View File

@ -10,7 +10,7 @@ class ActivityPub::ActivitySerializer < ActiveModel::Serializer
end end
def type def type
object.reblog? ? 'Announce' : 'Create' announce? ? 'Announce' : 'Create'
end end
def actor def actor
@ -24,4 +24,8 @@ class ActivityPub::ActivitySerializer < ActiveModel::Serializer
def cc def cc
ActivityPub::TagManager.instance.cc(object) ActivityPub::TagManager.instance.cc(object)
end end
def announce?
object.reblog?
end
end end

View File

@ -9,6 +9,7 @@ class ActivityPub::NoteSerializer < ActiveModel::Serializer
has_many :virtual_tags, key: :tag has_many :virtual_tags, key: :tag
attribute :atom_uri, key: '_:atomUri', if: :local? attribute :atom_uri, key: '_:atomUri', if: :local?
attribute :in_reply_to_atom_uri, key: '_:inReplyToAtomUri'
def id def id
ActivityPub::TagManager.instance.uri_for(object) ActivityPub::TagManager.instance.uri_for(object)
@ -64,6 +65,12 @@ class ActivityPub::NoteSerializer < ActiveModel::Serializer
::TagManager.instance.uri_for(object) ::TagManager.instance.uri_for(object)
end end
def in_reply_to_atom_uri
return unless object.reply?
::TagManager.instance.uri_for(object.thread)
end
def local? def local?
object.account.local? object.account.local?
end end