WIP: Refactor upload, get url from modules #504
8 changed files with 23 additions and 30 deletions
|
@ -87,7 +87,7 @@ defmodule Pleroma.Upload do
|
||||||
{_, true} <-
|
{_, true} <-
|
||||||
{:description_limit,
|
{:description_limit,
|
||||||
String.length(description) <= Config.get([:instance, :description_limit])},
|
String.length(description) <= Config.get([:instance, :description_limit])},
|
||||||
{:ok, file} <- Pleroma.Uploaders.Uploader.put_file(uploader, upload) do
|
{:ok, upload} <- Pleroma.Uploaders.Uploader.put_file(uploader, upload) do
|
||||||
{:ok,
|
{:ok,
|
||||||
%{
|
%{
|
||||||
"id" => Utils.generate_object_id(),
|
"id" => Utils.generate_object_id(),
|
||||||
|
@ -97,7 +97,7 @@ defmodule Pleroma.Upload do
|
||||||
%{
|
%{
|
||||||
"type" => "Link",
|
"type" => "Link",
|
||||||
"mediaType" => upload.content_type,
|
"mediaType" => upload.content_type,
|
||||||
"href" => get_url(upload, file)
|
"href" => get_url(upload.name, upload.path)
|
||||||
}
|
}
|
||||||
|> Maps.put_if_present("width", upload.width)
|
|> Maps.put_if_present("width", upload.width)
|
||||||
|> Maps.put_if_present("height", upload.height)
|
|> Maps.put_if_present("height", upload.height)
|
||||||
|
@ -110,9 +110,7 @@ defmodule Pleroma.Upload do
|
||||||
{:error, :description_too_long}
|
{:error, :description_too_long}
|
||||||
|
|
||||||
{:error, error} ->
|
{:error, error} ->
|
||||||
Logger.error(
|
Logger.error("#{__MODULE__} store (using #{inspect(uploader)}) failed: #{inspect(error)}")
|
||||||
"#{__MODULE__} store (using #{inspect(uploader)}) failed: #{inspect(error)}"
|
|
||||||
)
|
|
||||||
|
|
||||||
{:error, error}
|
{:error, error}
|
||||||
end
|
end
|
||||||
|
@ -214,7 +212,7 @@ defmodule Pleroma.Upload do
|
||||||
tmp_path
|
tmp_path
|
||||||
end
|
end
|
||||||
|
|
||||||
defp get_url(%__MODULE__{name: name}, {:file, path}) do
|
defp get_url(name, path) do
|
||||||
base_url = base_url()
|
base_url = base_url()
|
||||||
|
|
||||||
path =
|
path =
|
||||||
|
@ -229,7 +227,5 @@ defmodule Pleroma.Upload do
|
||||||
|> Path.join()
|
|> Path.join()
|
||||||
end
|
end
|
||||||
|
|
||||||
defp get_url(_upload, {:url, url}), do: url
|
|
||||||
|
|
||||||
def base_url(), do: Config.get([__MODULE__, :uploader]).base_url()
|
def base_url(), do: Config.get([__MODULE__, :uploader]).base_url()
|
||||||
end
|
end
|
||||||
|
|
|
@ -30,7 +30,7 @@ defmodule Pleroma.Uploaders.Local do
|
||||||
File.cp!(upload.tempfile, result_file)
|
File.cp!(upload.tempfile, result_file)
|
||||||
end
|
end
|
||||||
|
|
||||||
:ok
|
{:ok, upload}
|
||||||
end
|
end
|
||||||
|
|
||||||
def upload_path do
|
def upload_path do
|
||||||
|
|
|
@ -47,7 +47,7 @@ defmodule Pleroma.Uploaders.S3 do
|
||||||
|
|
||||||
case ExAws.request(op) do
|
case ExAws.request(op) do
|
||||||
{:ok, _} ->
|
{:ok, _} ->
|
||||||
{:ok, {:file, s3_name}}
|
{:ok, Map.put(upload, :path, s3_name)}
|
||||||
|
|
||||||
error ->
|
error ->
|
||||||
Logger.error("#{__MODULE__}: #{inspect(error)}")
|
Logger.error("#{__MODULE__}: #{inspect(error)}")
|
||||||
|
|
|
@ -34,26 +34,23 @@ defmodule Pleroma.Uploaders.Uploader do
|
||||||
* `:wait_callback` will wait for an http post request at `/api/pleroma/upload_callback/:upload_path` and call the uploader's `http_callback/3` method.
|
* `:wait_callback` will wait for an http post request at `/api/pleroma/upload_callback/:upload_path` and call the uploader's `http_callback/3` method.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
@type file_spec :: {:file | :url, String.t()}
|
|
||||||
@callback put_file(upload :: struct()) ::
|
@callback put_file(upload :: struct()) ::
|
||||||
:ok | {:ok, file_spec()} | {:error, String.t()} | :wait_callback
|
:ok | {:ok, Pleroma.Upload} | {:error, String.t()} | :wait_callback
|
||||||
|
|
||||||
@callback delete_file(file :: String.t()) :: :ok | {:error, String.t()}
|
@callback delete_file(file :: String.t()) :: :ok | {:error, String.t()}
|
||||||
|
|
||||||
@callback base_url() :: String.t()
|
@callback base_url() :: String.t()
|
||||||
|
|
||||||
@callback http_callback(Plug.Conn.t(), Map.t()) ::
|
@callback http_callback(Plug.Conn.t(), Map.t(), Pleroma.Upload) ::
|
||||||
{:ok, Plug.Conn.t()}
|
{:ok, Plug.Conn.t(), Pleroma.Upload}
|
||||||
| {:ok, Plug.Conn.t(), file_spec()}
|
|
||||||
| {:error, Plug.Conn.t(), String.t()}
|
| {:error, Plug.Conn.t(), String.t()}
|
||||||
@optional_callbacks http_callback: 2
|
@optional_callbacks http_callback: 3
|
||||||
|
|
||||||
@spec put_file(module(), upload :: struct()) :: {:ok, file_spec()} | {:error, String.t()}
|
@spec put_file(module(), upload :: struct()) :: {:ok, Pleroma.Upload} | {:error, String.t()}
|
||||||
def put_file(uploader, upload) do
|
def put_file(uploader, upload) do
|
||||||
case uploader.put_file(upload) do
|
case uploader.put_file(upload) do
|
||||||
:ok -> {:ok, {:file, upload.path}}
|
{:ok, %Pleroma.Upload{}} = ok -> ok
|
||||||
:wait_callback -> handle_callback(uploader, upload)
|
:wait_callback -> handle_callback(uploader, upload)
|
||||||
{:ok, _} = ok -> ok
|
|
||||||
{:error, _} = error -> error
|
{:error, _} = error -> error
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -63,10 +60,10 @@ defmodule Pleroma.Uploaders.Uploader do
|
||||||
|
|
||||||
receive do
|
receive do
|
||||||
{__MODULE__, pid, conn, params} ->
|
{__MODULE__, pid, conn, params} ->
|
||||||
case uploader.http_callback(conn, params) do
|
case uploader.http_callback(conn, params, upload) do
|
||||||
{:ok, conn, ok} ->
|
{:ok, conn, upload} ->
|
||||||
send(pid, {__MODULE__, conn})
|
send(pid, {__MODULE__, conn})
|
||||||
{:ok, ok}
|
{:ok, upload}
|
||||||
|
|
||||||
{:error, conn, error} ->
|
{:error, conn, error} ->
|
||||||
send(pid, {__MODULE__, conn})
|
send(pid, {__MODULE__, conn})
|
||||||
|
|
|
@ -9,7 +9,7 @@ defmodule Pleroma.Upload.Filter.MogrifyTest do
|
||||||
alias Pleroma.Upload.Filter
|
alias Pleroma.Upload.Filter
|
||||||
|
|
||||||
test "apply mogrify filter" do
|
test "apply mogrify filter" do
|
||||||
clear_config(Filter.Mogrify, args: [{"tint", "40"}])
|
clear_config([Filter.Mogrify, :args], [{"tint", "40"}])
|
||||||
|
|
||||||
File.cp!(
|
File.cp!(
|
||||||
"test/fixtures/image.jpg",
|
"test/fixtures/image.jpg",
|
||||||
|
|
|
@ -37,8 +37,8 @@ defmodule Pleroma.UploadTest do
|
||||||
|
|
||||||
describe "Tried storing a file when http callback response success result" do
|
describe "Tried storing a file when http callback response success result" do
|
||||||
defmodule TestUploaderSuccess do
|
defmodule TestUploaderSuccess do
|
||||||
def http_callback(conn, _params),
|
def http_callback(conn, _params, upload),
|
||||||
do: {:ok, conn, {:file, "post-process-file.jpg"}}
|
do: {:ok, conn, Map.put(upload, :path, "post-process-file.jpg")}
|
||||||
|
|
||||||
def put_file(upload), do: TestUploaderBase.put_file(upload, __MODULE__)
|
def put_file(upload), do: TestUploaderBase.put_file(upload, __MODULE__)
|
||||||
|
|
||||||
|
@ -74,7 +74,7 @@ defmodule Pleroma.UploadTest do
|
||||||
|
|
||||||
describe "Tried storing a file when http callback response error" do
|
describe "Tried storing a file when http callback response error" do
|
||||||
defmodule TestUploaderError do
|
defmodule TestUploaderError do
|
||||||
def http_callback(conn, _params), do: {:error, conn, "Errors"}
|
def http_callback(conn, _params, _upload), do: {:error, conn, "Errors"}
|
||||||
|
|
||||||
def put_file(upload), do: TestUploaderBase.put_file(upload, __MODULE__)
|
def put_file(upload), do: TestUploaderBase.put_file(upload, __MODULE__)
|
||||||
end
|
end
|
||||||
|
|
|
@ -24,7 +24,7 @@ defmodule Pleroma.Uploaders.LocalTest do
|
||||||
tempfile: Path.absname("test/fixtures/image_tmp.jpg")
|
tempfile: Path.absname("test/fixtures/image_tmp.jpg")
|
||||||
}
|
}
|
||||||
|
|
||||||
assert Local.put_file(file) == :ok
|
assert Local.put_file(file) == {:ok, file}
|
||||||
|
|
||||||
assert Path.join([Local.upload_path(), file_path])
|
assert Path.join([Local.upload_path(), file_path])
|
||||||
|> File.exists?()
|
|> File.exists?()
|
||||||
|
@ -43,8 +43,8 @@ defmodule Pleroma.Uploaders.LocalTest do
|
||||||
tempfile: Path.absname("test/fixtures/image_tmp.jpg")
|
tempfile: Path.absname("test/fixtures/image_tmp.jpg")
|
||||||
}
|
}
|
||||||
|
|
||||||
:ok = Local.put_file(file)
|
{:ok, file} = Local.put_file(file)
|
||||||
local_path = Path.join([Local.upload_path(), file_path])
|
local_path = Path.join([Local.upload_path(), file.path])
|
||||||
assert File.exists?(local_path)
|
assert File.exists?(local_path)
|
||||||
|
|
||||||
Local.delete_file(file_path)
|
Local.delete_file(file_path)
|
||||||
|
|
|
@ -67,7 +67,7 @@ defmodule Pleroma.Uploaders.S3Test do
|
||||||
|
|
||||||
test "save file", %{file_upload: file_upload} do
|
test "save file", %{file_upload: file_upload} do
|
||||||
with_mock ExAws, request: fn _ -> {:ok, :ok} end do
|
with_mock ExAws, request: fn _ -> {:ok, :ok} end do
|
||||||
assert S3.put_file(file_upload) == {:ok, {:file, "test_folder/image-tet.jpg"}}
|
assert S3.put_file(file_upload) == {:ok, file_upload}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue