diff --git a/lib/philomena/analyzers/webm.ex b/lib/philomena/analyzers/webm.ex index 2d670832..236978b1 100644 --- a/lib/philomena/analyzers/webm.ex +++ b/lib/philomena/analyzers/webm.ex @@ -5,7 +5,7 @@ defmodule Philomena.Analyzers.Webm do %{ extension: "webm", mime_type: "video/webm", - animated?: true, + animated?: stats.animated?, duration: stats.duration, dimensions: stats.dimensions } @@ -14,16 +14,16 @@ defmodule Philomena.Analyzers.Webm do defp stats(file) do case System.cmd("mediastat", [file]) do {output, 0} -> - [_size, _frames, width, height, num, den] = + [_size, frames, width, height, num, den] = output |> String.trim() |> String.split(" ") |> Enum.map(&String.to_integer/1) - %{dimensions: {width, height}, duration: num / den} + %{animated?: frames > 1, dimensions: {width, height}, duration: num / den} _ -> - %{dimensions: {0, 0}, duration: 0.0} + %{animated?: false, dimensions: {0, 0}, duration: 0.0} end end end diff --git a/lib/philomena/images/elasticsearch_index.ex b/lib/philomena/images/elasticsearch_index.ex index 2a56d3bc..54154c7b 100644 --- a/lib/philomena/images/elasticsearch_index.ex +++ b/lib/philomena/images/elasticsearch_index.ex @@ -18,6 +18,7 @@ defmodule Philomena.Images.ElasticsearchIndex do mappings: %{ dynamic: false, properties: %{ + animated: %{type: "boolean"}, anonymous: %{type: "boolean"}, aspect_ratio: %{type: "float"}, comment_count: %{type: "integer"}, @@ -38,6 +39,8 @@ defmodule Philomena.Images.ElasticsearchIndex do file_name: %{type: "keyword"}, fingerprint: %{type: "keyword"}, first_seen_at: %{type: "date"}, + fps: %{type: "float"}, + frames: %{type: "integer"}, height: %{type: "integer"}, hidden_by_user_ids: %{type: "keyword"}, hidden_by_users: %{type: "keyword"}, @@ -48,6 +51,7 @@ defmodule Philomena.Images.ElasticsearchIndex do orig_sha512_hash: %{type: "keyword"}, original_format: %{type: "keyword"}, pixels: %{type: "integer"}, + processed: %{type: "boolean"}, score: %{type: "integer"}, size: %{type: "integer"}, sha512_hash: %{type: "keyword"}, @@ -55,6 +59,7 @@ defmodule Philomena.Images.ElasticsearchIndex do tag_count: %{type: "integer"}, tag_ids: %{type: "keyword"}, tags: %{type: "text", analyzer: "keyword"}, + thumbnails_generated: %{type: "boolean"}, true_uploader: %{type: "keyword"}, true_uploader_id: %{type: "keyword"}, updated_at: %{type: "date"}, @@ -100,7 +105,8 @@ defmodule Philomena.Images.ElasticsearchIndex do height: image.image_height, pixels: image.image_width * image.image_height, size: image.image_size, - duration: image.image_duration, + animated: image.image_is_animated, + duration: if(image.image_is_animated, do: image.image_duration, else: 0), tag_count: length(image.tags), aspect_ratio: image.image_aspect_ratio, wilson_score: wilson_score(image), @@ -115,6 +121,8 @@ defmodule Philomena.Images.ElasticsearchIndex do source_url: image.source_url |> to_string |> String.downcase(), file_name: image.image_name, original_format: image.image_format, + processed: image.processed, + thumbnails_generated: image.thumbnails_generated, fingerprint: image.fingerprint, uploader_id: if(!!image.user_id and !image.anonymous, do: image.user_id), true_uploader_id: image.user_id, diff --git a/lib/philomena/images/query.ex b/lib/philomena/images/query.ex index d7af3b0f..12a33423 100644 --- a/lib/philomena/images/query.ex +++ b/lib/philomena/images/query.ex @@ -74,6 +74,7 @@ defmodule Philomena.Images.Query do date_fields: ~W(created_at updated_at first_seen_at), literal_fields: ~W(faved_by orig_sha512_hash sha512_hash uploader source_url original_format mime_type), + bool_fields: ~W(animated processed thumbnails_generated), ngram_fields: ~W(description), custom_fields: ~W(gallery_id), default_field: {"namespaced_tags.name", :term}, @@ -106,7 +107,7 @@ defmodule Philomena.Images.Query do ~W(fingerprint upvoted_by downvoted_by true_uploader hidden_by deleted_by_user), ngram_fields: fields[:ngram_fields] ++ ~W(deletion_reason), ip_fields: ~W(ip), - bool_fields: ~W(deleted), + bool_fields: fields[:bool_fields] ++ ~W(deleted), aliases: Map.merge(fields[:aliases], %{ "upvoted_by" => "upvoters", diff --git a/lib/philomena/workers/thumbnail_worker.ex b/lib/philomena/workers/thumbnail_worker.ex index ceeae948..fb943c4c 100644 --- a/lib/philomena/workers/thumbnail_worker.ex +++ b/lib/philomena/workers/thumbnail_worker.ex @@ -1,5 +1,6 @@ defmodule Philomena.ThumbnailWorker do alias Philomena.Images.Thumbnailer + alias Philomena.Images def perform(image_id) do Thumbnailer.generate_thumbnails(image_id) @@ -9,5 +10,9 @@ defmodule Philomena.ThumbnailWorker do "image:process", %{image_id: image_id} ) + + image_id + |> Images.get_image!() + |> Images.reindex_image() end end diff --git a/lib/philomena_web/templates/search/_form.html.slime b/lib/philomena_web/templates/search/_form.html.slime index aa899303..97760553 100644 --- a/lib/philomena_web/templates/search/_form.html.slime +++ b/lib/philomena_web/templates/search/_form.html.slime @@ -26,6 +26,7 @@ h1 Search a data-search-add="width:1920" data-search-select-last="4" data-search-show-help="numeric" Image width a data-search-add="height:1080" data-search-select-last="4" data-search-show-help="numeric" Image height a data-search-add="aspect_ratio:1" data-search-select-last="1" data-search-show-help="numeric" Aspect ratio + a data-search-add="animated:false" data-search-select-last="5" data-search-show-help="boolean" Animated a data-search-add="duration:10" data-search-select-last="2" data-search-show-help="numeric" Duration (seconds) a data-search-add="pixels.gte:5000000" data-search-select-last="7" data-search-show-help="numeric" Pixels a data-search-add="size.lt:1048576" data-search-select-last="7" data-search-show-help="numeric" File size (bytes) @@ -46,6 +47,20 @@ h1 Search a href="/pages/search_syntax" Help .block__content + .hidden.walloftext data-search-help="boolean" + strong.js-search-help-subject> + ' is a Boolean-valued field. It only accepts the values + code> true + ' and + code false + |. + br + br + em<> Example: + ' to find images which are not animated, you would use + code animated:false + | . + .hidden.walloftext data-search-help="numeric" strong.js-search-help-subject> | is a numerical range field. Four qualifiers,