mobilizon.chapril.org-mobil.../lib/web/upload/filter/optimize.ex

42 lines
824 B
Elixir

defmodule Mobilizon.Web.Upload.Filter.Optimize do
@moduledoc """
Handle picture optimizations
"""
@behaviour Mobilizon.Web.Upload.Filter
alias Mobilizon.Config
@default_optimizers [
JpegOptim,
PngQuant,
Optipng,
Svgo,
Gifsicle,
Cwebp
]
def filter(%Mobilizon.Web.Upload{tempfile: file, content_type: "image" <> _}) do
optimizers = Config.get([__MODULE__, :optimizers], @default_optimizers)
case ExOptimizer.optimize(file, deps: optimizers) do
{:ok, _res} ->
{:ok, :filtered}
{:error, err} ->
require Logger
Logger.warn(
"Unable to optimize file #{file}. The return from the process was #{inspect(err)}"
)
{:ok, :noop}
err ->
{:error, err}
end
end
def filter(_), do: {:ok, :noop}
end