metadata: add ability to search exif metadata.
Usage: * https://danbooru.donmai.us/media_metadata?search[has_metadata]=true * https://danbooru.donmai.us/media_metadata?search[has_metadata]=false * https://danbooru.donmai.us/media_metadata?search[metadata_has_key]=GIF:GIFVersion * https://danbooru.donmai.us/media_metadata?search[metadata][GIF:GIFVersion]=89a * https://danbooru.donmai.us/media_metadata?search[metadata][GIF:GIFVersion]&search[metadata][GIF:BackgroundColor]=0
This commit is contained in:
@@ -1,20 +1,20 @@
|
||||
class MediaAsset < ApplicationRecord
|
||||
has_one :media_metadata, dependent: :destroy
|
||||
|
||||
def self.create_from_media_file!(media_file)
|
||||
create!(
|
||||
md5: media_file.md5,
|
||||
file_ext: media_file.file_ext,
|
||||
file_size: media_file.file_size,
|
||||
image_width: media_file.width,
|
||||
image_height: media_file.height,
|
||||
media_metadata: MediaMetadata.new(metadata: media_file.metadata),
|
||||
)
|
||||
end
|
||||
|
||||
def self.search(params)
|
||||
q = search_attributes(params, :id, :created_at, :updated_at, :md5, :file_ext, :file_size, :image_width, :image_height)
|
||||
q = q.apply_default_order(params)
|
||||
q
|
||||
end
|
||||
|
||||
def file=(file_or_path)
|
||||
media_file = file_or_path.is_a?(MediaFile) ? file_or_path : MediaFile.open(file_or_path)
|
||||
|
||||
self.md5 = media_file.md5
|
||||
self.file_ext = media_file.file_ext
|
||||
self.file_size = media_file.file_size
|
||||
self.image_width = media_file.width
|
||||
self.image_height = media_file.height
|
||||
self.media_metadata = MediaMetadata.new(file: media_file)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -15,8 +15,12 @@ class MediaMetadata < ApplicationRecord
|
||||
belongs_to :media_asset
|
||||
|
||||
def self.search(params)
|
||||
q = search_attributes(params, :id, :created_at, :updated_at, :media_asset_id)
|
||||
q = search_attributes(params, :id, :created_at, :updated_at, :media_asset, :metadata)
|
||||
q = q.apply_default_order(params)
|
||||
q
|
||||
end
|
||||
|
||||
def file=(file_or_path)
|
||||
self.metadata = MediaFile.open(file_or_path).metadata
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user