commit: e6c81a635b99dcec4f8fded00d9451cb876df822
parent: f93de3a516d23cddea7cce147d3da3decac85f2f
Author: Eugen Rochko <eugen@zeonfederated.com>
Date: Tue, 11 Jul 2017 17:25:49 +0200
Fix #2848 - Rake task to redownload avatars/headers (#4156)
Can be filtered by a specific domain
Resolves #2292
Diffstat:
3 files changed, 31 insertions(+), 9 deletions(-)
diff --git a/app/controllers/admin/accounts_controller.rb b/app/controllers/admin/accounts_controller.rb
@@ -22,8 +22,8 @@ module Admin
end
def redownload
- @account.avatar = @account.avatar_remote_url
- @account.header = @account.header_remote_url
+ @account.reset_avatar!
+ @account.reset_header!
@account.save!
redirect_to admin_account_path(@account.id)
diff --git a/app/models/concerns/remotable.rb b/app/models/concerns/remotable.rb
@@ -6,8 +6,9 @@ module Remotable
included do
attachment_definitions.each_key do |attachment_name|
- attribute_name = "#{attachment_name}_remote_url".to_sym
- method_name = "#{attribute_name}=".to_sym
+ attribute_name = "#{attachment_name}_remote_url".to_sym
+ method_name = "#{attribute_name}=".to_sym
+ alt_method_name = "reset_#{attachment_name}!".to_sym
define_method method_name do |url|
begin
@@ -35,6 +36,15 @@ module Remotable
nil
end
end
+
+ define_method alt_method_name do
+ url = self[attribute_name]
+
+ return if url.blank?
+
+ self[attribute_name] = ''
+ send(method_name, url)
+ end
end
end
end
diff --git a/lib/tasks/mastodon.rake b/lib/tasks/mastodon.rake
@@ -74,7 +74,7 @@ namespace :mastodon do
end
namespace :media do
- desc 'Removes media attachments that have not been assigned to any status for longer than a day'
+ desc 'Removes media attachments that have not been assigned to any status for longer than a day (deprecated)'
task clear: :environment do
# No-op
# This task is now executed via sidekiq-scheduler
@@ -100,6 +100,18 @@ namespace :mastodon do
MediaAttachment.where(file_file_name: nil).where.not(type: :unknown).in_batches.update_all(type: :unknown)
Rails.logger.debug 'Done!'
end
+
+ desc 'Redownload avatars/headers of remote users. Optionally limit to a particular domain with DOMAIN'
+ task redownload_avatars: :environment do
+ accounts = Account.remote
+ accounts = accounts.where(domain: ENV['DOMAIN']) if ENV['DOMAIN'].present?
+
+ accounts.find_each do |account|
+ account.reset_avatar!
+ account.reset_header!
+ account.save
+ end
+ end
end
namespace :push do
@@ -111,7 +123,7 @@ namespace :mastodon do
end
end
- desc 'Re-subscribes to soon expiring PuSH subscriptions'
+ desc 'Re-subscribes to soon expiring PuSH subscriptions (deprecated)'
task refresh: :environment do
# No-op
# This task is now executed via sidekiq-scheduler
@@ -119,13 +131,13 @@ namespace :mastodon do
end
namespace :feeds do
- desc 'Clear timelines of inactive users'
+ desc 'Clear timelines of inactive users (deprecated)'
task clear: :environment do
# No-op
# This task is now executed via sidekiq-scheduler
end
- desc 'Clears all timelines'
+ desc 'Clear all timelines without regenerating them'
task clear_all: :environment do
Redis.current.keys('feed:*').each { |key| Redis.current.del(key) }
end
@@ -151,7 +163,7 @@ namespace :mastodon do
end
end
- desc 'List all admin users'
+ desc 'List e-mails of all admin users'
task admins: :environment do
puts 'Admin user emails:'
puts User.admins.map(&:email).join("\n")