Fix Updates being forwarded even when not processable or causing no change (#17699)
* Fix Updates being forwarded even when not processable or causing no change * Refactor and ensure status edit is strictly newer than last known editgh/stable
parent
46ad7fea9d
commit
d3aa9cf774
|
@ -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
|
||||
|
|
Reference in New Issue