The <link rel="mentioned" /> tag refers to accounts by href. So we were matching the DB by the url attribute, and falling back to HTTP look-up. However, GS and Mastodon use profile URLs as URIs, too, and the match for that was missing. This could potentially alleviate some extra network requests
This commit is contained in:
		
							parent
							
								
									99226aba93
								
							
						
					
					
						commit
						babbb2135e
					
				
					 1 changed files with 11 additions and 7 deletions
				
			
		| 
						 | 
					@ -161,13 +161,7 @@ class ProcessFeedService < BaseService
 | 
				
			||||||
      xml.xpath('./xmlns:link[@rel="mentioned"]', xmlns: TagManager::XMLNS).each do |link|
 | 
					      xml.xpath('./xmlns:link[@rel="mentioned"]', xmlns: TagManager::XMLNS).each do |link|
 | 
				
			||||||
        next if [TagManager::TYPES[:group], TagManager::TYPES[:collection]].include? link['ostatus:object-type']
 | 
					        next if [TagManager::TYPES[:group], TagManager::TYPES[:collection]].include? link['ostatus:object-type']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        url = Addressable::URI.parse(link['href'])
 | 
					        mentioned_account = account_from_href(link['href'])
 | 
				
			||||||
 | 
					 | 
				
			||||||
        mentioned_account = if TagManager.instance.web_domain?(url.host)
 | 
					 | 
				
			||||||
                              Account.find_local(url.path.gsub('/users/', ''))
 | 
					 | 
				
			||||||
                            else
 | 
					 | 
				
			||||||
                              Account.find_by(url: link['href']) || FetchRemoteAccountService.new.call(link['href'])
 | 
					 | 
				
			||||||
                            end
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        next if mentioned_account.nil? || processed_account_ids.include?(mentioned_account.id)
 | 
					        next if mentioned_account.nil? || processed_account_ids.include?(mentioned_account.id)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -178,6 +172,16 @@ class ProcessFeedService < BaseService
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def account_from_href(href)
 | 
				
			||||||
 | 
					      url = Addressable::URI.parse(href)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      if TagManager.instance.web_domain?(url.host)
 | 
				
			||||||
 | 
					        Account.find_local(url.path.gsub('/users/', ''))
 | 
				
			||||||
 | 
					      else
 | 
				
			||||||
 | 
					        Account.find_by(uri: href) || Account.find_by(url: href) || FetchRemoteAccountService.new.call(href)
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def hashtags_from_xml(parent, xml)
 | 
					    def hashtags_from_xml(parent, xml)
 | 
				
			||||||
      tags = xml.xpath('./xmlns:category', xmlns: TagManager::XMLNS).map { |category| category['term'] }.select(&:present?)
 | 
					      tags = xml.xpath('./xmlns:category', xmlns: TagManager::XMLNS).map { |category| category['term'] }.select(&:present?)
 | 
				
			||||||
      ProcessHashtagsService.new.call(parent, tags)
 | 
					      ProcessHashtagsService.new.call(parent, tags)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Reference in a new issue