2021-05-12 18:38:11 +00:00
|
|
|
# Pleroma: A lightweight social networking server
|
|
|
|
# Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/>
|
|
|
|
# SPDX-License-Identifier: AGPL-3.0-only
|
|
|
|
|
2021-05-18 20:33:33 +00:00
|
|
|
defmodule Pleroma.Upload.Filter.AnalyzeMetadata do
|
2021-05-12 18:38:11 +00:00
|
|
|
@moduledoc """
|
|
|
|
Extracts metadata about the upload, such as width/height
|
|
|
|
"""
|
|
|
|
require Logger
|
|
|
|
|
|
|
|
@behaviour Pleroma.Upload.Filter
|
|
|
|
|
|
|
|
@spec filter(Pleroma.Upload.t()) ::
|
|
|
|
{:ok, :filtered, Pleroma.Upload.t()} | {:ok, :noop} | {:error, String.t()}
|
|
|
|
def filter(%Pleroma.Upload{tempfile: file, content_type: "image" <> _} = upload) do
|
|
|
|
try do
|
|
|
|
image =
|
|
|
|
file
|
|
|
|
|> Mogrify.open()
|
|
|
|
|> Mogrify.verbose()
|
|
|
|
|
|
|
|
upload =
|
|
|
|
upload
|
|
|
|
|> Map.put(:width, image.width)
|
|
|
|
|> Map.put(:height, image.height)
|
2021-05-14 13:38:23 +00:00
|
|
|
|> Map.put(:blurhash, get_blurhash(file))
|
2021-05-12 18:38:11 +00:00
|
|
|
|
|
|
|
{:ok, :filtered, upload}
|
|
|
|
rescue
|
|
|
|
e in ErlangError ->
|
|
|
|
Logger.warn("#{__MODULE__}: #{inspect(e)}")
|
|
|
|
{:ok, :noop}
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def filter(_), do: {:ok, :noop}
|
2021-05-14 13:38:23 +00:00
|
|
|
|
|
|
|
defp get_blurhash(file) do
|
|
|
|
with {:ok, blurhash} <- :eblurhash.magick(file) do
|
|
|
|
blurhash
|
|
|
|
else
|
|
|
|
_ -> nil
|
|
|
|
end
|
|
|
|
end
|
2021-05-12 18:38:11 +00:00
|
|
|
end
|