diff options
author | Claire <claire.github-309c@sitedethib.com> | 2022-08-28 13:27:17 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-08-28 13:27:17 +0200 |
commit | 215738bb3cba4951e84174b461da5f1004b0649e (patch) | |
tree | ceca848b6a0553474e2b228dbf8c9e9c144cc99f /app/services | |
parent | 54d9a9c18a74a1ec766d8f611ad3ee11ab4c5422 (diff) | |
parent | 54ae7a221e862990550850500d70997c70187b70 (diff) |
Merge pull request #1833 from ClearlyClaire/glitch-soc/merge-upstream
Merge upstream changes
Diffstat (limited to 'app/services')
-rw-r--r-- | app/services/clear_domain_media_service.rb | 32 |
1 files changed, 16 insertions, 16 deletions
diff --git a/app/services/clear_domain_media_service.rb b/app/services/clear_domain_media_service.rb index 704cfb71a..9e70ebe51 100644 --- a/app/services/clear_domain_media_service.rb +++ b/app/services/clear_domain_media_service.rb @@ -10,24 +10,18 @@ class ClearDomainMediaService < BaseService private - def invalidate_association_caches! + def invalidate_association_caches!(status_ids) # 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}-*") } + Rails.cache.delete_multi(status_ids.map { |id| "statuses/#{id}" }) end def clear_media! - @affected_status_ids = [] - - begin - clear_account_images! - clear_account_attachments! - clear_emojos! - ensure - invalidate_association_caches! - end + clear_account_images! + clear_account_attachments! + clear_emojos! end def clear_account_images! @@ -39,12 +33,18 @@ class ClearDomainMediaService < BaseService end def clear_account_attachments! - media_from_blocked_domain.reorder(nil).find_each do |attachment| - @affected_status_ids << attachment.status_id if attachment.status_id.present? + media_from_blocked_domain.reorder(nil).find_in_batches do |attachments| + affected_status_ids = [] + + attachments.each do |attachment| + affected_status_ids << attachment.status_id if attachment.status_id.present? + + attachment.file.destroy if attachment.file&.exists? + attachment.type = :unknown + attachment.save + end - attachment.file.destroy if attachment.file&.exists? - attachment.type = :unknown - attachment.save + invalidate_association_caches!(affected_status_ids) unless affected_status_ids.empty? end end |