posts: use storage manager to delete files.
This commit is contained in:
@@ -93,40 +93,31 @@ class Post < ApplicationRecord
|
|||||||
extend ActiveSupport::Concern
|
extend ActiveSupport::Concern
|
||||||
|
|
||||||
module ClassMethods
|
module ClassMethods
|
||||||
def delete_files(post_id, file_path, large_file_path, preview_file_path, force: false)
|
def delete_files(post_id, md5, file_ext, force: false)
|
||||||
unless force
|
if Post.where(md5: md5).exists? && !force
|
||||||
# XXX should pass in the md5 instead of parsing it.
|
raise DeletionError.new("Files still in use; skipping deletion.")
|
||||||
preview_file_path =~ %r!/data/preview/(?:test\.)?([a-z0-9]{32})\.jpg\z!
|
|
||||||
md5 = $1
|
|
||||||
|
|
||||||
if Post.where(md5: md5).exists?
|
|
||||||
raise DeletionError.new("Files still in use; skipping deletion.")
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
backup_service = Danbooru.config.backup_service
|
Danbooru.config.storage_manager.delete_file(post_id, md5, file_ext, :original)
|
||||||
backup_service.delete(file_path, type: :original)
|
Danbooru.config.storage_manager.delete_file(post_id, md5, file_ext, :large)
|
||||||
backup_service.delete(large_file_path, type: :large)
|
Danbooru.config.storage_manager.delete_file(post_id, md5, file_ext, :preview)
|
||||||
backup_service.delete(preview_file_path, type: :preview)
|
|
||||||
|
|
||||||
# the large file and the preview don't necessarily exist. if so errors will be ignored.
|
Danbooru.config.backup_storage_manager.delete_file(post_id, md5, file_ext, :original)
|
||||||
FileUtils.rm_f(file_path)
|
Danbooru.config.backup_storage_manager.delete_file(post_id, md5, file_ext, :large)
|
||||||
FileUtils.rm_f(large_file_path)
|
Danbooru.config.backup_storage_manager.delete_file(post_id, md5, file_ext, :preview)
|
||||||
FileUtils.rm_f(preview_file_path)
|
|
||||||
|
|
||||||
RemoteFileManager.new(file_path).delete
|
|
||||||
RemoteFileManager.new(large_file_path).delete
|
|
||||||
RemoteFileManager.new(preview_file_path).delete
|
|
||||||
|
|
||||||
if Danbooru.config.cloudflare_key
|
if Danbooru.config.cloudflare_key
|
||||||
md5, ext = File.basename(file_path).split(".")
|
CloudflareService.new.delete(md5, file_ext)
|
||||||
CloudflareService.new.delete(md5, ext)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def queue_delete_files(grace_period)
|
||||||
|
Post.delay(queue: "default", run_at: Time.now + grace_period).delete_files(id, md5, file_ext)
|
||||||
|
end
|
||||||
|
|
||||||
def delete_files
|
def delete_files
|
||||||
Post.delete_files(id, file_path, large_file_path, preview_file_path, force: true)
|
Post.delete_files(id, md5, file_ext, force: true)
|
||||||
end
|
end
|
||||||
|
|
||||||
def distribute_files(file, sample_file, preview_file)
|
def distribute_files(file, sample_file, preview_file)
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ class PostReplacement < ApplicationRecord
|
|||||||
# md5/file_ext to delete the old files. if saving the post fails,
|
# md5/file_ext to delete the old files. if saving the post fails,
|
||||||
# this is rolled back so the job won't run.
|
# this is rolled back so the job won't run.
|
||||||
if md5_changed
|
if md5_changed
|
||||||
Post.delay(queue: "default", run_at: Time.now + DELETION_GRACE_PERIOD).delete_files(post.id, post.file_path, post.large_file_path, post.preview_file_path)
|
post.queue_delete_files(DELETION_GRACE_PERIOD)
|
||||||
end
|
end
|
||||||
|
|
||||||
self.file_ext = upload.file_ext
|
self.file_ext = upload.file_ext
|
||||||
|
|||||||
Reference in New Issue
Block a user