media assets: add dynamically-generated thumbnails (owner-only).
Add ability to dynamically generate thumbnails with: * https://danbooru.donmai.us/media_assets/6961761.jpg?width=180&height=180 This is currently restricted to the Owner-level user because it's slow.
This commit is contained in:
@@ -15,6 +15,22 @@ class MediaAssetsController < ApplicationController
|
||||
def show
|
||||
@media_asset = authorize MediaAsset.find(params[:id])
|
||||
@post = Post.find_by_md5(@media_asset.md5)
|
||||
respond_with(@media_asset)
|
||||
|
||||
if CurrentUser.is_owner? && request.format.symbol.in?(%i[jpeg webp avif])
|
||||
width = params.fetch(:width, @media_asset.image_width).to_i
|
||||
height = params.fetch(:height, @media_asset.image_height).to_i
|
||||
quality = params.fetch(:quality, 85).to_i
|
||||
original_file = @media_asset.variant(:original).open_file
|
||||
|
||||
if width != @media_asset.image_width || height != @media_asset.image_height || request.format != @media_asset.mime_type
|
||||
media_file = original_file.preview!(width, height, format: request.format.symbol, quality: quality)
|
||||
else
|
||||
media_file = original_file
|
||||
end
|
||||
|
||||
send_file(media_file.path, type: media_file.mime_type, disposition: "inline")
|
||||
else
|
||||
respond_with(@media_asset)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -147,6 +147,10 @@ class MediaFile
|
||||
ExifTool.new(file).metadata
|
||||
end
|
||||
|
||||
def mime_type
|
||||
Mime::Type.lookup_by_extension(file_ext)
|
||||
end
|
||||
|
||||
# @return [Boolean] True if the file is supported by Danbooru. Certain files may be unsupported because they use features we don't support.
|
||||
def is_supported?
|
||||
true
|
||||
@@ -251,8 +255,9 @@ class MediaFile
|
||||
path: path,
|
||||
width: width,
|
||||
height: height,
|
||||
file_ext: file_ext,
|
||||
file_size: file_size,
|
||||
file_ext: file_ext,
|
||||
mime_type: mime_type,
|
||||
md5: md5,
|
||||
is_corrupt?: is_corrupt?,
|
||||
is_supported?: is_supported?,
|
||||
@@ -276,5 +281,5 @@ class MediaFile
|
||||
end
|
||||
end
|
||||
|
||||
memoize :file_ext, :file_size, :md5, :metadata
|
||||
memoize :file_ext, :file_size, :md5, :metadata, :mime_type
|
||||
end
|
||||
|
||||
@@ -304,6 +304,11 @@ class MediaAsset < ApplicationRecord
|
||||
end
|
||||
end
|
||||
|
||||
# @return [Mime::Type] The file's MIME type.
|
||||
def mime_type
|
||||
Mime::Type.lookup_by_extension(file_ext)
|
||||
end
|
||||
|
||||
def file=(file_or_path)
|
||||
media_file = file_or_path.is_a?(MediaFile) ? file_or_path : MediaFile.open(file_or_path)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user