Browse Source

Similarly to #2426, put creation of remote statuses in a transaction, (#3233)

so that public timeline/caching would not encounter incomplete data
closed-social-glitch-2
Eugen Rochko 6 years ago
committed by GitHub
parent
commit
4a4733b397
1 changed files with 18 additions and 13 deletions
  1. +18
    -13
      app/services/process_feed_service.rb

+ 18
- 13
app/services/process_feed_service.rb View File

@ -47,25 +47,30 @@ class ProcessFeedService < BaseService
return
end
status, just_created = nil
Rails.logger.debug "Creating remote status #{id}"
status, just_created = status_from_xml(@xml)
return if status.nil?
return status unless just_created
ApplicationRecord.transaction do
status, just_created = status_from_xml(@xml)
return if status.nil?
return status unless just_created
if verb == :share
original_status = shared_status_from_xml(@xml.at_xpath('.//activity:object', activity: TagManager::AS_XMLNS))
status.reblog = original_status
if verb == :share
original_status = shared_status_from_xml(@xml.at_xpath('.//activity:object', activity: TagManager::AS_XMLNS))
status.reblog = original_status
if original_status.nil?
status.destroy
return nil
elsif original_status.reblog?
status.reblog = original_status.reblog
if original_status.nil?
status.destroy
return nil
elsif original_status.reblog?
status.reblog = original_status.reblog
end
end
end
status.save!
status.save!
end
notify_about_mentions!(status) unless status.reblog?
notify_about_reblog!(status) if status.reblog? && status.reblog.account.local?

Loading…
Cancel
Save