Set unknown attachment type when adding domain blocks (#2605)

Follow-up to #2599. When a domain block with `reject_media` is
added or `rake mastodon:media:remove_remote` is invoked, mastodon
deletes the locally cached attachments and avatars but does not
reflect that change in the database, causing the `file` fields to
still have values. This change persists the deletion in the
database and sets the attachment type to unknown.

This also introduces a one-off rake task that sets all attachments
without a local file to the "unknown" type. The upgrade notes for
the next release should contain a post-upgrade step with
`rake mastodon:media:set_unknown`.
pull/15/head
Patrick Figel 2017-04-29 02:44:03 +02:00 committed by Eugen Rochko
parent 27301312a6
commit 197af5de70
2 changed files with 13 additions and 0 deletions

View File

@ -39,12 +39,15 @@ class BlockDomainService < BaseService
blocked_domain_accounts.find_each do |account| blocked_domain_accounts.find_each do |account|
account.avatar.destroy account.avatar.destroy
account.header.destroy account.header.destroy
account.save
end end
end end
def clear_account_attachments def clear_account_attachments
media_from_blocked_domain.find_each do |attachment| media_from_blocked_domain.find_each do |attachment|
attachment.file.destroy attachment.file.destroy
attachment.type = :unknown
attachment.save
end end
end end

View File

@ -53,8 +53,18 @@ namespace :mastodon do
task remove_remote: :environment do task remove_remote: :environment do
MediaAttachment.where.not(remote_url: '').where('created_at < ?', 1.week.ago).find_each do |media| MediaAttachment.where.not(remote_url: '').where('created_at < ?', 1.week.ago).find_each do |media|
media.file.destroy media.file.destroy
media.type = :unknown
media.save
end end
end end
desc 'Set unknown attachment type for remote-only attachments'
task set_unknown: :environment do
Rails.logger.debug 'Setting unknown attachment type for remote-only attachments...'
# rubocop:disable Rails/SkipsModelValidations
MediaAttachment.where(file_file_name: nil).where.not(type: :unknown).in_batches.update_all(type: :unknown)
Rails.logger.debug 'Done!'
end
end end
namespace :push do namespace :push do