1
0
Fork 0
mirror of https://github.com/mastodon/mastodon.git synced 2024-08-20 21:08:15 -07:00
mastodon/app/lib/activitypub/activity/announce.rb

34 lines
866 B
Ruby
Raw Normal View History

# frozen_string_literal: true
class ActivityPub::Activity::Announce < ActivityPub::Activity
def perform
original_status = status_from_uri(object_uri)
original_status ||= fetch_remote_original_status
return if original_status.nil? || delete_arrived_first?(@json['id'])
status = Status.find_by(account: @account, reblog: original_status)
return status unless status.nil?
status = Status.create!(
account: @account,
reblog: original_status,
uri: @json['id'],
created_at: @json['published'] || Time.now.utc
)
distribute(status)
status
end
private
def fetch_remote_original_status
if object_uri.start_with?('http')
ActivityPub::FetchRemoteStatusService.new.call(object_uri)
elsif @object['url'].present?
::FetchRemoteStatusService.new.call(@object['url'])
end
end
end