|
|
@ -15,6 +15,8 @@ class ActivityPub::ProcessStatusUpdateService < BaseService |
|
|
|
# Only native types can be updated at the moment |
|
|
|
return if !expected_type? || already_updated_more_recently? |
|
|
|
|
|
|
|
last_edit_date = status.edited_at.presence || status.created_at |
|
|
|
|
|
|
|
# Only allow processing one create/update per status at a time |
|
|
|
RedisLock.acquire(lock_options) do |lock| |
|
|
|
if lock.acquired? |
|
|
@ -37,6 +39,8 @@ class ActivityPub::ProcessStatusUpdateService < BaseService |
|
|
|
raise Mastodon::RaceConditionError |
|
|
|
end |
|
|
|
end |
|
|
|
|
|
|
|
forward_activity! if significant_changes? && @status_parser.edited_at.present? && @status_parser.edited_at > last_edit_date |
|
|
|
end |
|
|
|
|
|
|
|
private |
|
|
@ -263,4 +267,12 @@ class ActivityPub::ProcessStatusUpdateService < BaseService |
|
|
|
PollExpirationNotifyWorker.remove_from_scheduled(poll.id) if @previous_expires_at.present? && @previous_expires_at > poll.expires_at |
|
|
|
PollExpirationNotifyWorker.perform_at(poll.expires_at + 5.minutes, poll.id) |
|
|
|
end |
|
|
|
|
|
|
|
def forward_activity! |
|
|
|
forwarder.forward! if forwarder.forwardable? |
|
|
|
end |
|
|
|
|
|
|
|
def forwarder |
|
|
|
@forwarder ||= ActivityPub::Forwarder.new(@account, @json, @status) |
|
|
|
end |
|
|
|
end |