Fix the `enable_seo_post_urls` config option not being respected. This option controls whether filenames in image URLs contain the tags. This option requires URLs rewrites in Nginx to work so it's disabled by default.
57 lines
1.9 KiB
Ruby
57 lines
1.9 KiB
Ruby
# StorageManager is an abstract superclass that defines a simple interface for
|
|
# storing files on local or remote backends. All image files stored by Danbooru
|
|
# are handled by a StorageManager.
|
|
#
|
|
# A StorageManager has methods for saving, deleting, and opening files, and for
|
|
# generates URLs for images.
|
|
#
|
|
# @abstract
|
|
# @see StorageManager::Local
|
|
# @see StorageManager::SFTP
|
|
class StorageManager
|
|
class Error < StandardError; end
|
|
|
|
attr_reader :base_url, :base_dir
|
|
|
|
# Initialize a storage manager object.
|
|
# @param base_url [String] the base URL where images are stored (ex: "https://cdn.donmai.us/")
|
|
# @param base_dir [String] the base directory where images are stored (ex: "/var/www/danbooru/public/images")
|
|
def initialize(base_url: nil, base_dir: nil)
|
|
@base_url = base_url.to_s.chomp("/")
|
|
@base_dir = base_dir.to_s
|
|
end
|
|
|
|
# Store the given file at the given path. If a file already exists at that
|
|
# location it should be overwritten atomically. Either the file is fully
|
|
# written, or an error is raised and the original file is left unchanged. The
|
|
# file should never be in a partially written state.
|
|
#
|
|
# @param io [IO] a file (or a readable IO object)
|
|
# @param path [String] the remote path where the file should be stored
|
|
def store(io, path)
|
|
raise NotImplementedError, "store not implemented"
|
|
end
|
|
|
|
# Delete the file at the given path. If the file doesn't exist, no error
|
|
# should be raised.
|
|
# @param path [String] the remote path of the file to be deleted
|
|
def delete(path)
|
|
raise NotImplementedError, "delete not implemented"
|
|
end
|
|
|
|
# Return a readonly copy of the file located at the given path.
|
|
# @param path [String] the remote path of the file to open
|
|
# @return [MediaFile] the image file
|
|
def open(path)
|
|
raise NotImplementedError, "open not implemented"
|
|
end
|
|
|
|
def file_url(path)
|
|
File.join(base_url, path)
|
|
end
|
|
|
|
def full_path(path)
|
|
File.join(base_dir, path)
|
|
end
|
|
end
|