diff --git a/app/logical/remote_file_manager.rb b/app/logical/remote_file_manager.rb index ac63e2949..16669c9a3 100644 --- a/app/logical/remote_file_manager.rb +++ b/app/logical/remote_file_manager.rb @@ -7,6 +7,24 @@ class RemoteFileManager @path = path end + def distribute_to_archive(dest_url) + uri = URI.parse(dest_url) + dir_name = uri.host.split(".").first + uuid = SecureRandom.uuid + dest_path = "/var/www/#{dir_name}#{uri.path}" + temp_path = "/tmp/rfm-#{Danbooru.config.server_host}-#{uuid}" + + Net::SFTP.start(uri.host, Danbooru.config.archive_server_login) do |ftp| + ftp.upload!(path, temp_path) + begin + ftp.rename!(temp_path, dest_path) + rescue Net::SFTP::StatusException + ftp.remove!(dest_path) + ftp.rename!(temp_apth, dest_path) + end + end + end + def distribute uuid = SecureRandom.uuid temp_path = "/tmp/rfm-#{Danbooru.config.server_host}-#{uuid}" diff --git a/app/models/post.rb b/app/models/post.rb index 21005a2c6..29985c556 100644 --- a/app/models/post.rb +++ b/app/models/post.rb @@ -107,9 +107,16 @@ class Post < ApplicationRecord end def distribute_files - RemoteFileManager.new(file_path).distribute - RemoteFileManager.new(preview_file_path).distribute if has_preview? - RemoteFileManager.new(large_file_path).distribute if has_large? + if Danbooru.config.build_file_url(self) =~ /^http/ + # this post is archived + RemoteFileManager.new(file_path).distribute_to_archive(Danbooru.config.build_file_url(self)) + RemoteFileManager.new(preview_file_path).distribute if has_preview? + RemoteFileManager.new(large_file_path).distribute_to_archive(Danbooru.config.build_large_file_url(self)) if has_large? + else + RemoteFileManager.new(file_path).distribute + RemoteFileManager.new(preview_file_path).distribute if has_preview? + RemoteFileManager.new(large_file_path).distribute if has_large? + end end def file_path_prefix diff --git a/config/danbooru_default_config.rb b/config/danbooru_default_config.rb index bc7cb0ae6..23541a5a9 100644 --- a/config/danbooru_default_config.rb +++ b/config/danbooru_default_config.rb @@ -217,6 +217,10 @@ module Danbooru "albert" end + def archive_server_login + "danbooru" + end + def build_file_url(post) "/data/#{post.file_path_prefix}/#{post.md5}.#{post.file_ext}" end