Fix casuality of processing remote mentions such that notifications
about them would be processed only after the entire status is processed
This commit is contained in:
parent
47bf592db7
commit
a5daa806f2
|
@ -61,12 +61,25 @@ class ProcessFeedService < BaseService
|
||||||
|
|
||||||
status.save!
|
status.save!
|
||||||
|
|
||||||
NotifyService.new.call(status.reblog.account, status) if status.reblog? && status.reblog.account.local?
|
notify_about_mentions!(status) unless status.reblog?
|
||||||
|
notify_about_reblog!(status) if status.reblog? && status.reblog.account.local?
|
||||||
Rails.logger.debug "Queuing remote status #{status.id} (#{id}) for distribution"
|
Rails.logger.debug "Queuing remote status #{status.id} (#{id}) for distribution"
|
||||||
DistributionWorker.perform_async(status.id)
|
DistributionWorker.perform_async(status.id)
|
||||||
status
|
status
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def notify_about_mentions!(status)
|
||||||
|
status.mentions.includes(:account).each do |mention|
|
||||||
|
mentioned_account = mention.account
|
||||||
|
next unless mentioned_account.local?
|
||||||
|
NotifyService.new.call(mentioned_account, mention)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def notify_about_reblog!(status)
|
||||||
|
NotifyService.new.call(status.reblog.account, status)
|
||||||
|
end
|
||||||
|
|
||||||
def delete_status
|
def delete_status
|
||||||
Rails.logger.debug "Deleting remote status #{id}"
|
Rails.logger.debug "Deleting remote status #{id}"
|
||||||
status = Status.find_by(uri: id)
|
status = Status.find_by(uri: id)
|
||||||
|
@ -159,10 +172,7 @@ class ProcessFeedService < BaseService
|
||||||
|
|
||||||
next if mentioned_account.nil? || processed_account_ids.include?(mentioned_account.id)
|
next if mentioned_account.nil? || processed_account_ids.include?(mentioned_account.id)
|
||||||
|
|
||||||
mention = mentioned_account.mentions.where(status: parent).first_or_create(status: parent)
|
mentioned_account.mentions.where(status: parent).first_or_create(status: parent)
|
||||||
|
|
||||||
# Notify local user
|
|
||||||
NotifyService.new.call(mentioned_account, mention) if mentioned_account.local?
|
|
||||||
|
|
||||||
# So we can skip duplicate mentions
|
# So we can skip duplicate mentions
|
||||||
processed_account_ids << mentioned_account.id
|
processed_account_ids << mentioned_account.id
|
||||||
|
|
|
@ -27,7 +27,7 @@ class ProcessMentionsService < BaseService
|
||||||
mentioned_account.mentions.where(status: status).first_or_create(status: status)
|
mentioned_account.mentions.where(status: status).first_or_create(status: status)
|
||||||
end
|
end
|
||||||
|
|
||||||
status.mentions.each do |mention|
|
status.mentions.includes(:account).each do |mention|
|
||||||
mentioned_account = mention.account
|
mentioned_account = mention.account
|
||||||
|
|
||||||
if mentioned_account.local?
|
if mentioned_account.local?
|
||||||
|
|
Reference in a new issue