commit: 0d5d11eeff048a5022a6eef68d299856f5bb9860
parent: 0397c58b61d8a364ff488fc5631bfc751903c242
Author: Eugen Rochko <eugen@zeonfederated.com>
Date: Sat, 26 Aug 2017 19:55:10 +0200
Add _:inReplyToAtomUri to ActivityPub (#4702)
Diffstat:
4 files changed, 27 insertions(+), 5 deletions(-)
diff --git a/app/helpers/jsonld_helper.rb b/app/helpers/jsonld_helper.rb
@@ -10,7 +10,7 @@ module JsonLdHelper
end
def value_or_id(value)
- value.is_a?(String) ? value : value['id']
+ value.is_a?(String) || value.nil? ? value : value['id']
end
def supported_context?(json)
diff --git a/app/lib/activitypub/activity/create.rb b/app/lib/activitypub/activity/create.rb
@@ -91,7 +91,7 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
def resolve_thread(status)
return unless status.reply? && status.thread.nil?
- ThreadResolveWorker.perform_async(status.id, @object['inReplyTo'])
+ ThreadResolveWorker.perform_async(status.id, in_reply_to_uri)
end
def conversation_from_uri(uri)
@@ -118,8 +118,19 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
end
def replied_to_status
- return if @object['inReplyTo'].blank?
- @replied_to_status ||= status_from_uri(@object['inReplyTo'])
+ return @replied_to_status if defined?(@replied_to_status)
+
+ 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
def text_from_content
diff --git a/app/serializers/activitypub/activity_serializer.rb b/app/serializers/activitypub/activity_serializer.rb
@@ -10,7 +10,7 @@ class ActivityPub::ActivitySerializer < ActiveModel::Serializer
end
def type
- object.reblog? ? 'Announce' : 'Create'
+ announce? ? 'Announce' : 'Create'
end
def actor
@@ -24,4 +24,8 @@ class ActivityPub::ActivitySerializer < ActiveModel::Serializer
def cc
ActivityPub::TagManager.instance.cc(object)
end
+
+ def announce?
+ object.reblog?
+ end
end
diff --git a/app/serializers/activitypub/note_serializer.rb b/app/serializers/activitypub/note_serializer.rb
@@ -9,6 +9,7 @@ class ActivityPub::NoteSerializer < ActiveModel::Serializer
has_many :virtual_tags, key: :tag
attribute :atom_uri, key: '_:atomUri', if: :local?
+ attribute :in_reply_to_atom_uri, key: '_:inReplyToAtomUri'
def id
ActivityPub::TagManager.instance.uri_for(object)
@@ -64,6 +65,12 @@ class ActivityPub::NoteSerializer < ActiveModel::Serializer
::TagManager.instance.uri_for(object)
end
+ def in_reply_to_atom_uri
+ return unless object.reply?
+
+ ::TagManager.instance.uri_for(object.thread)
+ end
+
def local?
object.account.local?
end