parent
					
						
							
								7c7e78d807
							
						
					
				
			
			
				commit
				
					
						12cd097e7c
					
				
			
		
					 2 changed files with 23 additions and 11 deletions
				
			
		|  | @ -64,6 +64,10 @@ class ActivityPub::TagManager | |||
|     account_status_replies_url(target.account, target, page_params) | ||||
|   end | ||||
| 
 | ||||
|   def followers_uri_for(target) | ||||
|     target.local? ? account_followers_url(target) : target.followers_url.presence | ||||
|   end | ||||
| 
 | ||||
|   # Primary audience of a status | ||||
|   # Public statuses go out to primarily the public collection | ||||
|   # Unlisted and private statuses go out primarily to the followers collection | ||||
|  | @ -80,17 +84,17 @@ class ActivityPub::TagManager | |||
|         account_ids = status.active_mentions.pluck(:account_id) | ||||
|         to = status.account.followers.where(id: account_ids).each_with_object([]) do |account, result| | ||||
|           result << uri_for(account) | ||||
|           result << account_followers_url(account) if account.group? | ||||
|           result << followers_uri_for(account) if account.group? | ||||
|         end | ||||
|         to.concat(FollowRequest.where(target_account_id: status.account_id, account_id: account_ids).each_with_object([]) do |request, result| | ||||
|           result << uri_for(request.account) | ||||
|           result << account_followers_url(request.account) if request.account.group? | ||||
|         end) | ||||
|           result << followers_uri_for(request.account) if request.account.group? | ||||
|         end).compact | ||||
|       else | ||||
|         status.active_mentions.each_with_object([]) do |mention, result| | ||||
|           result << uri_for(mention.account) | ||||
|           result << account_followers_url(mention.account) if mention.account.group? | ||||
|         end | ||||
|           result << followers_uri_for(mention.account) if mention.account.group? | ||||
|         end.compact | ||||
|       end | ||||
|     end | ||||
|   end | ||||
|  | @ -118,17 +122,17 @@ class ActivityPub::TagManager | |||
|         account_ids = status.active_mentions.pluck(:account_id) | ||||
|         cc.concat(status.account.followers.where(id: account_ids).each_with_object([]) do |account, result| | ||||
|           result << uri_for(account) | ||||
|           result << account_followers_url(account) if account.group? | ||||
|         end) | ||||
|           result << followers_uri_for(account) if account.group? | ||||
|         end.compact) | ||||
|         cc.concat(FollowRequest.where(target_account_id: status.account_id, account_id: account_ids).each_with_object([]) do |request, result| | ||||
|           result << uri_for(request.account) | ||||
|           result << account_followers_url(request.account) if request.account.group? | ||||
|         end) | ||||
|           result << followers_uri_for(request.account) if request.account.group? | ||||
|         end.compact) | ||||
|       else | ||||
|         cc.concat(status.active_mentions.each_with_object([]) do |mention, result| | ||||
|           result << uri_for(mention.account) | ||||
|           result << account_followers_url(mention.account) if mention.account.group? | ||||
|         end) | ||||
|           result << followers_uri_for(mention.account) if mention.account.group? | ||||
|         end.compact) | ||||
|       end | ||||
|     end | ||||
| 
 | ||||
|  |  | |||
|  | @ -42,6 +42,14 @@ RSpec.describe ActivityPub::TagManager do | |||
|       expect(subject.to(status)).to eq [subject.uri_for(mentioned)] | ||||
|     end | ||||
| 
 | ||||
|     it "returns URIs of mentioned group's followers for direct statuses to groups" do | ||||
|       status    = Fabricate(:status, visibility: :direct) | ||||
|       mentioned = Fabricate(:account, domain: 'remote.org', uri: 'https://remote.org/group', followers_url: 'https://remote.org/group/followers', actor_type: 'Group') | ||||
|       status.mentions.create(account: mentioned) | ||||
|       expect(subject.to(status)).to include(subject.uri_for(mentioned)) | ||||
|       expect(subject.to(status)).to include(subject.followers_uri_for(mentioned)) | ||||
|     end | ||||
| 
 | ||||
|     it "returns URIs of mentions for direct silenced author's status only if they are followers or requesting to be" do | ||||
|       bob    = Fabricate(:account, username: 'bob') | ||||
|       alice  = Fabricate(:account, username: 'alice') | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue