discourse/app/jobs/scheduled/clean_up_uploads.rb

33 lines
1.3 KiB
Ruby
Raw Normal View History

2013-10-14 20:27:41 +08:00
module Jobs
class CleanUpUploads < Jobs::Scheduled
every 1.hour
2013-10-14 20:27:41 +08:00
def execute(args)
return unless SiteSetting.clean_up_uploads?
2013-10-14 20:27:41 +08:00
ignore_urls = []
ignore_urls << UserProfile.uniq.where("profile_background IS NOT NULL AND profile_background != ''").pluck(:profile_background)
ignore_urls << UserProfile.uniq.where("card_background IS NOT NULL AND card_background != ''").pluck(:card_background)
ignore_urls << Category.uniq.where("logo_url IS NOT NULL AND logo_url != ''").pluck(:logo_url)
ignore_urls << Category.uniq.where("background_url IS NOT NULL AND background_url != ''").pluck(:background_url)
ignore_urls.flatten!
2013-11-28 05:01:41 +08:00
grace_period = [SiteSetting.clean_orphan_uploads_grace_period_hours, 1].max
2013-10-14 20:27:41 +08:00
Upload.where("created_at < ? AND
(retain_hours IS NULL OR created_at < current_timestamp - interval '1 hour' * retain_hours )", grace_period.hour.ago)
.where("id NOT IN (SELECT upload_id from post_uploads)")
2014-06-07 08:24:58 +08:00
.where("id NOT IN (SELECT custom_upload_id from user_avatars)")
.where("id NOT IN (SELECT gravatar_upload_id from user_avatars)")
.where("url NOT IN (?)", ignore_urls)
2013-10-14 20:27:41 +08:00
.find_each do |upload|
upload.destroy
2013-10-14 20:27:41 +08:00
end
end
end
end