commit: a5daa806f2e4f824925aa1558202458bd3af7a0a
parent: 47bf592db786107f0cdc67b98f55c947acdb5a51
Author: Eugen Rochko <eugen@zeonfederated.com>
Date: Mon, 13 Mar 2017 16:34:15 +0100
Fix casuality of processing remote mentions such that notifications
about them would be processed only after the entire status is processed
Diffstat:
2 files changed, 16 insertions(+), 6 deletions(-)
diff --git a/app/services/process_feed_service.rb b/app/services/process_feed_service.rb
@@ -61,12 +61,25 @@ class ProcessFeedService < BaseService
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"
DistributionWorker.perform_async(status.id)
status
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
Rails.logger.debug "Deleting remote status #{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)
- mention = mentioned_account.mentions.where(status: parent).first_or_create(status: parent)
-
- # Notify local user
- NotifyService.new.call(mentioned_account, mention) if mentioned_account.local?
+ mentioned_account.mentions.where(status: parent).first_or_create(status: parent)
# So we can skip duplicate mentions
processed_account_ids << mentioned_account.id
diff --git a/app/services/process_mentions_service.rb b/app/services/process_mentions_service.rb
@@ -27,7 +27,7 @@ class ProcessMentionsService < BaseService
mentioned_account.mentions.where(status: status).first_or_create(status: status)
end
- status.mentions.each do |mention|
+ status.mentions.includes(:account).each do |mention|
mentioned_account = mention.account
if mentioned_account.local?