uploads: allow searching uploads and media assets by metatag.
Allow searching the /uploads and /media_assets pages by the following metatags: * id: * md5: * width: * height: * duration: * mpixels: * ratio: * filesize: * filetype: * date: * age: * status:<processing|active|deleted|expunged|failed> (for /media_assets) * status:<pending|processing|active|failed> (for /uploads) * is:<filetype>, is:<status> * exif: Examples: * https://betabooru.donmai.us/media_assets?search[ai_tags_match]=filetype:png * https://betabooru.donmai.us/uploads?search[ai_tags_match]=filetype:png Note that in /uploads search, the id:, date:, and age: metatags refer to the upload media asset, not the upload itself. Note also that uploads may contain multiple assets, so for example searching uploads by `filetype:png` will return all uploads containing at least one PNG file, even if they contain other non-PNG files.
This commit is contained in:
@@ -204,7 +204,30 @@ class MediaAsset < ApplicationRecord
|
||||
concerning :SearchMethods do
|
||||
class_methods do
|
||||
def ai_tags_match(tag_string, score_range: (50..))
|
||||
AITagQuery.search(tag_string, relation: self, score_range: score_range)
|
||||
MediaAssetQuery.search(tag_string, relation: self, score_range: score_range)
|
||||
end
|
||||
|
||||
def is_matches(value)
|
||||
case value.downcase
|
||||
when *MediaAsset.statuses.keys
|
||||
where(status: value)
|
||||
when *FILE_TYPES
|
||||
attribute_matches(value, :file_ext, :enum)
|
||||
else
|
||||
none
|
||||
end
|
||||
end
|
||||
|
||||
def exif_matches(string)
|
||||
# string = File:ColorComponents=3
|
||||
if string.include?("=")
|
||||
key, value = string.split(/=/, 2)
|
||||
hash = { key => value }
|
||||
joins(:media_metadata).where_json_contains("media_metadata.metadata", hash)
|
||||
# string = File:ColorComponents
|
||||
else
|
||||
joins(:media_metadata).where_json_has_key("media_metadata.metadata", string)
|
||||
end
|
||||
end
|
||||
|
||||
def search(params, current_user)
|
||||
|
||||
Reference in New Issue
Block a user