giant massive dep upgrade and dialyxir-found error emporium (#371)
[akkoma] / lib / pleroma / upload / filter / mogrifun.ex
index 35a5a13814807f1a787c1e136fd51aef3bf245d2..69885a0bd66bbcba022118c88280c82b1e5466ea 100644 (file)
@@ -1,9 +1,14 @@
 # Pleroma: A lightweight social networking server
-# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
+# Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/>
 # SPDX-License-Identifier: AGPL-3.0-only
 
 defmodule Pleroma.Upload.Filter.Mogrifun do
   @behaviour Pleroma.Upload.Filter
+  alias Pleroma.Upload.Filter
+
+  @moduledoc """
+  This module is just an example of an Upload filter. It's not supposed to be used in production.
+  """
 
   @filters [
     {"implode", "1"},
@@ -33,32 +38,16 @@ defmodule Pleroma.Upload.Filter.Mogrifun do
     [{"fill", "yellow"}, {"tint", "40"}]
   ]
 
+  @spec filter(Pleroma.Upload.t()) :: {:ok, :filtered | :noop} | {:error, String.t()}
   def filter(%Pleroma.Upload{tempfile: file, content_type: "image" <> _}) do
-    filter = Enum.random(@filters)
-
-    file
-    |> Mogrify.open()
-    |> mogrify_filter(filter)
-    |> Mogrify.save(in_place: true)
-
-    :ok
-  end
-
-  def filter(_), do: :ok
-
-  defp mogrify_filter(mogrify, [filter | rest]) do
-    mogrify
-    |> mogrify_filter(filter)
-    |> mogrify_filter(rest)
+    try do
+      Filter.Mogrify.do_filter(file, [Enum.random(@filters)])
+      {:ok, :filtered}
+    rescue
+      e in ErlangError ->
+        {:error, "#{__MODULE__}: #{inspect(e)}"}
+    end
   end
 
-  defp mogrify_filter(mogrify, []), do: mogrify
-
-  defp mogrify_filter(mogrify, {action, options}) do
-    Mogrify.custom(mogrify, action, options)
-  end
-
-  defp mogrify_filter(mogrify, string) when is_binary(string) do
-    Mogrify.custom(mogrify, string)
-  end
+  def filter(_), do: {:ok, :noop}
 end