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
					
				
			
		
					 2 changed files with 16 additions and 6 deletions
				
			
		|  | @ -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 | ||||
|  |  | |||
|  | @ -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? | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue