forked from cybrespace/mastodon
		
	Reduce the number of synchronous resolves when posting toots (#6075)
This commit is contained in:
		
							parent
							
								
									6eb60260b1
								
							
						
					
					
						commit
						cea98e0c12
					
				
					 1 changed files with 15 additions and 9 deletions
				
			
		| 
						 | 
					@ -11,18 +11,20 @@ class ProcessMentionsService < BaseService
 | 
				
			||||||
    return unless status.local?
 | 
					    return unless status.local?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    status.text = status.text.gsub(Account::MENTION_RE) do |match|
 | 
					    status.text = status.text.gsub(Account::MENTION_RE) do |match|
 | 
				
			||||||
      begin
 | 
					      username, domain  = $1.split('@')
 | 
				
			||||||
        mentioned_account = resolve_remote_account_service.call($1)
 | 
					      mentioned_account = Account.find_remote(username, domain)
 | 
				
			||||||
      rescue Goldfinger::Error, HTTP::Error
 | 
					
 | 
				
			||||||
        mentioned_account = nil
 | 
					      if mention_undeliverable?(status, mentioned_account)
 | 
				
			||||||
 | 
					        begin
 | 
				
			||||||
 | 
					          mentioned_account = resolve_remote_account_service.call($1)
 | 
				
			||||||
 | 
					        rescue Goldfinger::Error, HTTP::Error
 | 
				
			||||||
 | 
					          mentioned_account = nil
 | 
				
			||||||
 | 
					        end
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      if mentioned_account.nil?
 | 
					      mentioned_account ||= Account.find_remote(username, domain)
 | 
				
			||||||
        username, domain  = $1.split('@')
 | 
					 | 
				
			||||||
        mentioned_account = Account.find_remote(username, domain)
 | 
					 | 
				
			||||||
      end
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
      next match if mentioned_account.nil? || (!mentioned_account.local? && mentioned_account.ostatus? && status.stream_entry.hidden?)
 | 
					      next match if mention_undeliverable?(status, mentioned_account)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      mentioned_account.mentions.where(status: status).first_or_create(status: status)
 | 
					      mentioned_account.mentions.where(status: status).first_or_create(status: status)
 | 
				
			||||||
      "@#{mentioned_account.acct}"
 | 
					      "@#{mentioned_account.acct}"
 | 
				
			||||||
| 
						 | 
					@ -37,6 +39,10 @@ class ProcessMentionsService < BaseService
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  private
 | 
					  private
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def mention_undeliverable?(status, mentioned_account)
 | 
				
			||||||
 | 
					    mentioned_account.nil? || (!mentioned_account.local? && mentioned_account.ostatus? && status.stream_entry.hidden?)
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def create_notification(status, mention)
 | 
					  def create_notification(status, mention)
 | 
				
			||||||
    mentioned_account = mention.account
 | 
					    mentioned_account = mention.account
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue