@ -5,13 +5,14 @@ class BlockDomainService < BaseService
def call ( domain_block )
@domain_block = domain_block
process_domain_block
process_domain_block!
end
private
def process_domain_block
def process_domain_block!
clear_media! if domain_block . reject_media?
if domain_block . silence?
silence_accounts!
elsif domain_block . suspend?
@ -19,14 +20,26 @@ class BlockDomainService < BaseService
end
end
def invalidate_association_caches!
# Normally, associated models of a status are immutable (except for accounts)
# so they are aggressively cached. After updating the media attachments to no
# longer point to a local file, we need to clear the cache to make those
# changes appear in the API and UI
@affected_status_ids . each { | id | Rails . cache . delete_matched ( " statuses/ #{ id } -* " ) }
end
def silence_accounts!
blocked_domain_accounts . in_batches . update_all ( silenced : true )
end
def clear_media!
clear_account_images
clear_account_attachments
clear_emojos
@affected_status_ids = [ ]
clear_account_images!
clear_account_attachments!
clear_emojos!
invalidate_association_caches!
end
def suspend_accounts!
@ -36,23 +49,25 @@ class BlockDomainService < BaseService
end
end
def clear_account_images
def clear_account_images!
blocked_domain_accounts . find_each do | account |
account . avatar . destroy
account . header . destroy
account . avatar . destroy if account . avatar . exists?
account . header . destroy if account . header . exists?
account . save
end
end
def clear_account_attachments
def clear_account_attachments!
media_from_blocked_domain . find_each do | attachment |
attachment . file . destroy
@affected_status_ids << attachment . status_id if attachment . status_id . present?
attachment . file . destroy if attachment . file . exists?
attachment . type = :unknown
attachment . save
end
end
def clear_emojos
def clear_emojos!
emojis_from_blocked_domains . destroy_all
end