diff options
Diffstat (limited to 'app/presenters/activitypub/activity_presenter.rb')
-rw-r--r-- | app/presenters/activitypub/activity_presenter.rb | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/app/presenters/activitypub/activity_presenter.rb b/app/presenters/activitypub/activity_presenter.rb index 5d174767f..dbeeb5316 100644 --- a/app/presenters/activitypub/activity_presenter.rb +++ b/app/presenters/activitypub/activity_presenter.rb @@ -4,24 +4,30 @@ class ActivityPub::ActivityPresenter < ActiveModelSerializers::Model attributes :id, :type, :actor, :published, :to, :cc, :virtual_object class << self - def from_status(status) + def from_status(status, domain, update: false, embed: false) new.tap do |presenter| + default_activity = update && status.edited.positive? ? 'Update' : 'Create' presenter.id = ActivityPub::TagManager.instance.activity_uri_for(status) - presenter.type = status.reblog? ? 'Announce' : 'Create' + presenter.type = (status.reblog? && status.spoiler_text.blank? ? 'Announce' : default_activity) presenter.actor = ActivityPub::TagManager.instance.uri_for(status.account) presenter.published = status.created_at - presenter.to = ActivityPub::TagManager.instance.to(status) - presenter.cc = ActivityPub::TagManager.instance.cc(status) + presenter.to = ActivityPub::TagManager.instance.to(status, domain) + presenter.cc = ActivityPub::TagManager.instance.cc(status, domain) + + unless embed || status.account.no_verify_auth? + presenter.virtual_object = ActivityPub::TagManager.instance.uri_for(status.proper) + next + end presenter.virtual_object = begin - if status.reblog? + if status.reblog? && status.spoiler_text.blank? if status.account == status.proper.account && status.proper.private_visibility? && status.local? status.proper else ActivityPub::TagManager.instance.uri_for(status.proper) end else - status.proper + status end end end |