logo

pleroma

My custom branche(s) on git.pleroma.social/pleroma/pleroma git clone https://hacktivis.me/git/pleroma.git

mogrify.ex (1347B)


  1. # Pleroma: A lightweight social networking server
  2. # Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
  3. # SPDX-License-Identifier: AGPL-3.0-only
  4. defmodule Pleroma.Upload.Filter.Mogrify do
  5. @behaviour Pleroma.Upload.Filter
  6. @type conversion :: action :: String.t() | {action :: String.t(), opts :: String.t()}
  7. @type conversions :: conversion() | [conversion()]
  8. @spec filter(Pleroma.Upload.t()) :: {:ok, :atom} | {:error, String.t()}
  9. def filter(%Pleroma.Upload{tempfile: file, content_type: "image" <> _}) do
  10. try do
  11. do_filter(file, Pleroma.Config.get!([__MODULE__, :args]))
  12. {:ok, :filtered}
  13. rescue
  14. e in ErlangError ->
  15. {:error, "#{__MODULE__}: #{inspect(e)}"}
  16. end
  17. end
  18. def filter(_), do: {:ok, :noop}
  19. def do_filter(file, filters) do
  20. file
  21. |> Mogrify.open()
  22. |> mogrify_filter(filters)
  23. |> Mogrify.save(in_place: true)
  24. end
  25. defp mogrify_filter(mogrify, nil), do: mogrify
  26. defp mogrify_filter(mogrify, [filter | rest]) do
  27. mogrify
  28. |> mogrify_filter(filter)
  29. |> mogrify_filter(rest)
  30. end
  31. defp mogrify_filter(mogrify, []), do: mogrify
  32. defp mogrify_filter(mogrify, {action, options}) do
  33. Mogrify.custom(mogrify, action, options)
  34. end
  35. defp mogrify_filter(mogrify, action) when is_binary(action) do
  36. Mogrify.custom(mogrify, action)
  37. end
  38. end