StorageManager: remove Post-specific code.
Refactor StorageManager to remove all image URL generation code. Instead the image URL generation code lives in MediaAsset. Now StorageManager is only concerned with how to read and write files to remote storage backends like S3 or SFTP, not with how image URLs should be generated. This way the file storage code isn't tightly coupled to posts, so it can be used to store any kind of file, not just images belonging to posts.
This commit is contained in:
@@ -38,7 +38,9 @@ class MediaAsset < ApplicationRecord
|
||||
end
|
||||
|
||||
def open_file
|
||||
storage_service.open(file_path)
|
||||
file = storage_service.open(file_path)
|
||||
frame_data = media_asset.pixiv_ugoira_frame_data&.data if media_asset.is_ugoira?
|
||||
MediaFile.open(file, frame_data: frame_data)
|
||||
end
|
||||
|
||||
def convert_file(media_file)
|
||||
|
||||
@@ -74,36 +74,47 @@ class Post < ApplicationRecord
|
||||
module FileMethods
|
||||
extend ActiveSupport::Concern
|
||||
|
||||
def storage_manager
|
||||
Danbooru.config.storage_manager
|
||||
def seo_tags
|
||||
presenter.humanized_essential_tag_string.gsub(/[^a-z0-9]+/, "_").gsub(/(?:^_+)|(?:_+$)/, "").gsub(/_{2,}/, "_")
|
||||
end
|
||||
|
||||
def file(type = :original)
|
||||
storage_manager.open_file(self, type)
|
||||
media_asset.variant(type).open_file
|
||||
end
|
||||
|
||||
def tagged_file_url(tagged_filenames: !CurrentUser.user.disable_tagged_filenames?)
|
||||
storage_manager.file_url(self, :original, tagged_filenames: tagged_filenames)
|
||||
slug = seo_tags if tagged_filenames
|
||||
media_asset.variant(:original).file_url(slug)
|
||||
end
|
||||
|
||||
def tagged_large_file_url(tagged_filenames: !CurrentUser.user.disable_tagged_filenames?)
|
||||
storage_manager.file_url(self, :large, tagged_filenames: tagged_filenames)
|
||||
slug = seo_tags if tagged_filenames
|
||||
|
||||
if media_asset.has_variant?(:sample)
|
||||
media_asset.variant(:sample).file_url(slug)
|
||||
else
|
||||
media_asset.variant(:original).file_url(slug)
|
||||
end
|
||||
end
|
||||
|
||||
def file_url
|
||||
storage_manager.file_url(self, :original)
|
||||
media_asset.variant(:original).file_url
|
||||
end
|
||||
|
||||
def large_file_url
|
||||
storage_manager.file_url(self, :large)
|
||||
if media_asset.has_variant?(:sample)
|
||||
media_asset.variant(:sample).file_url
|
||||
else
|
||||
media_asset.variant(:original).file_url
|
||||
end
|
||||
end
|
||||
|
||||
def preview_file_url
|
||||
storage_manager.file_url(self, :preview)
|
||||
media_asset.variant(:preview).file_url
|
||||
end
|
||||
|
||||
def crop_file_url
|
||||
storage_manager.file_url(self, :crop)
|
||||
media_asset.variant(:crop).file_url
|
||||
end
|
||||
|
||||
def open_graph_image_url
|
||||
@@ -1162,7 +1173,7 @@ class Post < ApplicationRecord
|
||||
|
||||
ModAction.log("<@#{user.name}> regenerated IQDB for post ##{id}", :post_regenerate_iqdb, user)
|
||||
else
|
||||
media_file = MediaFile.open(file, frame_data: pixiv_ugoira_frame_data&.data.to_a)
|
||||
media_file = media_asset.variant(:original).open_file
|
||||
media_asset.distribute_files!(media_file)
|
||||
|
||||
update!(
|
||||
|
||||
Reference in New Issue
Block a user