X-Git-Url: http://git.squeep.com/?a=blobdiff_plain;f=lib%2Fpleroma%2Fhelpers%2Fmedia_helper.ex;h=cb95d0e68c45dee9c5aa4a02919c4485ddd3f70e;hb=07a48b9293e4046c50b5d424d60a1bf16c7cc198;hp=d8a6db4e12b3fd546e52109d873ee140aa3b82cf;hpb=2d2af75777ae468fb08a2b09dc5af4636106a04b;p=akkoma
diff --git a/lib/pleroma/helpers/media_helper.ex b/lib/pleroma/helpers/media_helper.ex
index d8a6db4e1..cb95d0e68 100644
--- a/lib/pleroma/helpers/media_helper.ex
+++ b/lib/pleroma/helpers/media_helper.ex
@@ -1,5 +1,5 @@
# Pleroma: A lightweight social networking server
-# Copyright © 2017-2020 Pleroma Authors
+# Copyright © 2017-2021 Pleroma Authors
# SPDX-License-Identifier: AGPL-3.0-only
defmodule Pleroma.Helpers.MediaHelper do
@@ -7,13 +7,24 @@ defmodule Pleroma.Helpers.MediaHelper do
Handles common media-related operations.
"""
- @tmp_base "/tmp/pleroma-media_preview-pipe"
+ alias Pleroma.HTTP
+
+ require Logger
+
+ def missing_dependencies do
+ Enum.reduce([imagemagick: "convert", ffmpeg: "ffmpeg"], [], fn {sym, executable}, acc ->
+ if Pleroma.Utils.command_available?(executable) do
+ acc
+ else
+ [sym | acc]
+ end
+ end)
+ end
def image_resize(url, options) do
with executable when is_binary(executable) <- System.find_executable("convert"),
{:ok, args} <- prepare_image_resize_args(options),
- url = Pleroma.Web.MediaProxy.url(url),
- {:ok, env} <- Pleroma.HTTP.get(url),
+ {:ok, env} <- HTTP.get(url, [], []),
{:ok, fifo_path} <- mkfifo() do
args = List.flatten([fifo_path, args])
run_fifo(fifo_path, env, executable, args)
@@ -59,10 +70,10 @@ defmodule Pleroma.Helpers.MediaHelper do
defp prepare_image_resize_args(_), do: {:error, :missing_options}
+ # Note: video thumbnail is intentionally not resized (always has original dimensions)
def video_framegrab(url) do
with executable when is_binary(executable) <- System.find_executable("ffmpeg"),
- url = Pleroma.Web.MediaProxy.url(url),
- {:ok, env} <- Pleroma.HTTP.get(url),
+ {:ok, env} <- HTTP.get(url, [], []),
{:ok, fifo_path} <- mkfifo(),
args = [
"-y",
@@ -93,17 +104,17 @@ defmodule Pleroma.Helpers.MediaHelper do
args: args
])
- fifo = Port.open(to_charlist(fifo_path), [:eof, :binary, :stream, :out])
+ fifo = File.open!(fifo_path, [:append, :binary])
fix = Pleroma.Helpers.QtFastStart.fix(env.body)
- true = Port.command(fifo, fix)
- :erlang.port_close(fifo)
+ IO.binwrite(fifo, fix)
+ File.close(fifo)
loop_recv(pid)
after
File.rm(fifo_path)
end
- defp mkfifo() do
- path = "#{@tmp_base}#{to_charlist(:erlang.phash2(self()))}"
+ defp mkfifo do
+ path = Path.join(System.tmp_dir!(), "pleroma-media-preview-pipe-#{Ecto.UUID.generate()}")
case System.cmd("mkfifo", [path]) do
{_, 0} ->