61 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
		
		
			
		
	
	
			61 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
|  | # frozen_string_literal: true | ||
|  | 
 | ||
|  | class Form::AccountBatch | ||
|  |   include ActiveModel::Model | ||
|  | 
 | ||
|  |   attr_accessor :account_ids, :action, :current_account | ||
|  | 
 | ||
|  |   def save | ||
|  |     case action | ||
|  |     when 'unfollow' | ||
|  |       unfollow! | ||
|  |     when 'remove_from_followers' | ||
|  |       remove_from_followers! | ||
|  |     when 'block_domains' | ||
|  |       block_domains! | ||
|  |     end | ||
|  |   end | ||
|  | 
 | ||
|  |   private | ||
|  | 
 | ||
|  |   def unfollow! | ||
|  |     accounts.find_each do |target_account| | ||
|  |       UnfollowService.new.call(current_account, target_account) | ||
|  |     end | ||
|  |   end | ||
|  | 
 | ||
|  |   def remove_from_followers! | ||
|  |     current_account.passive_relationships.where(account_id: account_ids).find_each do |follow| | ||
|  |       reject_follow!(follow) | ||
|  |     end | ||
|  |   end | ||
|  | 
 | ||
|  |   def block_domains! | ||
|  |     AfterAccountDomainBlockWorker.push_bulk(account_domains) do |domain| | ||
|  |       [current_account.id, domain] | ||
|  |     end | ||
|  |   end | ||
|  | 
 | ||
|  |   def account_domains | ||
|  |     accounts.pluck(Arel.sql('distinct domain')).compact | ||
|  |   end | ||
|  | 
 | ||
|  |   def accounts | ||
|  |     Account.where(id: account_ids) | ||
|  |   end | ||
|  | 
 | ||
|  |   def reject_follow!(follow) | ||
|  |     follow.destroy | ||
|  | 
 | ||
|  |     return unless follow.account.activitypub? | ||
|  | 
 | ||
|  |     json = ActiveModelSerializers::SerializableResource.new( | ||
|  |       follow, | ||
|  |       serializer: ActivityPub::RejectFollowSerializer, | ||
|  |       adapter: ActivityPub::Adapter | ||
|  |     ).to_json | ||
|  | 
 | ||
|  |     ActivityPub::DeliveryWorker.perform_async(json, current_account.id, follow.account.inbox_url) | ||
|  |   end | ||
|  | end |