discourse/app/jobs/scheduled/clean_up_uploads.rb

27 lines
866 B
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
uploads_used_in_posts = PostUpload.uniq.pluck(:upload_id)
uploads_used_as_avatars = User.uniq.where('uploaded_avatar_id IS NOT NULL').pluck(:uploaded_avatar_id)
uploads_used_as_profile_backgrounds = User.uniq.where("profile_background IS NOT NULL AND profile_background != ''").pluck(:profile_background)
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 < ?", grace_period.hour.ago)
.where("id NOT IN (?)", uploads_used_in_posts + uploads_used_as_avatars)
.where("url NOT IN (?)", uploads_used_as_profile_backgrounds)
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