Pleroma.Upload: Set default upload name / description based on config.
This commit is contained in:
parent
34b099fffa
commit
aabc26a573
3 changed files with 40 additions and 4 deletions
|
@ -72,7 +72,8 @@ config :pleroma, Pleroma.Upload,
|
||||||
pool: :upload
|
pool: :upload
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
filename_display_max_length: 30
|
filename_display_max_length: 30,
|
||||||
|
default_description: nil
|
||||||
|
|
||||||
config :pleroma, Pleroma.Uploaders.Local, uploads: "uploads"
|
config :pleroma, Pleroma.Uploaders.Local, uploads: "uploads"
|
||||||
|
|
||||||
|
|
|
@ -56,6 +56,15 @@ defmodule Pleroma.Upload do
|
||||||
}
|
}
|
||||||
defstruct [:id, :name, :tempfile, :content_type, :path]
|
defstruct [:id, :name, :tempfile, :content_type, :path]
|
||||||
|
|
||||||
|
defp get_description(opts, upload) do
|
||||||
|
case {opts[:description], Pleroma.Config.get([Pleroma.Upload, :default_description])} do
|
||||||
|
{description, _} when is_binary(description) -> description
|
||||||
|
{_, :filename} -> upload.name
|
||||||
|
{_, str} when is_binary(str) -> str
|
||||||
|
_ -> ""
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
@spec store(source, options :: [option()]) :: {:ok, Map.t()} | {:error, any()}
|
@spec store(source, options :: [option()]) :: {:ok, Map.t()} | {:error, any()}
|
||||||
def store(upload, opts \\ []) do
|
def store(upload, opts \\ []) do
|
||||||
opts = get_opts(opts)
|
opts = get_opts(opts)
|
||||||
|
@ -63,7 +72,7 @@ defmodule Pleroma.Upload do
|
||||||
with {:ok, upload} <- prepare_upload(upload, opts),
|
with {:ok, upload} <- prepare_upload(upload, opts),
|
||||||
upload = %__MODULE__{upload | path: upload.path || "#{upload.id}/#{upload.name}"},
|
upload = %__MODULE__{upload | path: upload.path || "#{upload.id}/#{upload.name}"},
|
||||||
{:ok, upload} <- Pleroma.Upload.Filter.filter(opts.filters, upload),
|
{:ok, upload} <- Pleroma.Upload.Filter.filter(opts.filters, upload),
|
||||||
description = Map.get(opts, :description) || upload.name,
|
description = get_description(opts, upload),
|
||||||
{_, true} <-
|
{_, true} <-
|
||||||
{:description_limit,
|
{:description_limit,
|
||||||
String.length(description) <= Pleroma.Config.get([:instance, :description_limit])},
|
String.length(description) <= Pleroma.Config.get([:instance, :description_limit])},
|
||||||
|
|
|
@ -990,13 +990,39 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "uploading files" do
|
describe "uploading files" do
|
||||||
test "copies the file to the configured folder" do
|
setup do
|
||||||
file = %Plug.Upload{
|
test_file = %Plug.Upload{
|
||||||
content_type: "image/jpg",
|
content_type: "image/jpg",
|
||||||
path: Path.absname("test/fixtures/image.jpg"),
|
path: Path.absname("test/fixtures/image.jpg"),
|
||||||
filename: "an_image.jpg"
|
filename: "an_image.jpg"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
%{test_file: test_file}
|
||||||
|
end
|
||||||
|
|
||||||
|
test "sets a description if given", %{test_file: file} do
|
||||||
|
{:ok, %Object{} = object} = ActivityPub.upload(file, description: "a cool file")
|
||||||
|
assert object.data["name"] == "a cool file"
|
||||||
|
end
|
||||||
|
|
||||||
|
test "it sets the default description depending on the configuration", %{test_file: file} do
|
||||||
|
clear_config([Pleroma.Upload, :default_description])
|
||||||
|
|
||||||
|
Pleroma.Config.put([Pleroma.Upload, :default_description], nil)
|
||||||
|
{:ok, %Object{} = object} = ActivityPub.upload(file)
|
||||||
|
assert object.data["name"] == ""
|
||||||
|
|
||||||
|
Pleroma.Config.put([Pleroma.Upload, :default_description], :filename)
|
||||||
|
{:ok, %Object{} = object} = ActivityPub.upload(file)
|
||||||
|
assert object.data["name"] == "an_image.jpg"
|
||||||
|
|
||||||
|
Pleroma.Config.put([Pleroma.Upload, :default_description], "unnamed attachment")
|
||||||
|
{:ok, %Object{} = object} = ActivityPub.upload(file)
|
||||||
|
assert object.data["name"] == "unnamed attachment"
|
||||||
|
end
|
||||||
|
|
||||||
|
test "copies the file to the configured folder", %{test_file: file} do
|
||||||
|
clear_config([Pleroma.Upload, :default_description], :filename)
|
||||||
{:ok, %Object{} = object} = ActivityPub.upload(file)
|
{:ok, %Object{} = object} = ActivityPub.upload(file)
|
||||||
assert object.data["name"] == "an_image.jpg"
|
assert object.data["name"] == "an_image.jpg"
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue