diff options
Diffstat (limited to 'lib/pleroma')
-rw-r--r-- | lib/pleroma/web/api_spec/operations/status_operation.ex | 2 | ||||
-rw-r--r-- | lib/pleroma/web/common_api/utils.ex | 39 |
2 files changed, 31 insertions, 10 deletions
diff --git a/lib/pleroma/web/api_spec/operations/status_operation.ex b/lib/pleroma/web/api_spec/operations/status_operation.ex index 802fbef3e..bed0d1eac 100644 --- a/lib/pleroma/web/api_spec/operations/status_operation.ex +++ b/lib/pleroma/web/api_spec/operations/status_operation.ex @@ -453,7 +453,7 @@ defmodule Pleroma.Web.ApiSpec.StatusOperation do nullable: true, type: :array, items: %Schema{type: :string}, - description: "Array of Attachment ids to be attached as media." + description: "Array of Attachment ids or URLs to be attached as media." }, poll: poll_params(), in_reply_to_id: %Schema{ diff --git a/lib/pleroma/web/common_api/utils.ex b/lib/pleroma/web/common_api/utils.ex index b6feaf32a..f2359c93a 100644 --- a/lib/pleroma/web/common_api/utils.ex +++ b/lib/pleroma/web/common_api/utils.ex @@ -23,6 +23,19 @@ defmodule Pleroma.Web.CommonAPI.Utils do require Logger require Pleroma.Constants + defp raw_url_to_attachment(url, desc \\ nil) do + %{ + "type" => "Document", + "name" => desc, + "url" => [ + %{ + "type" => "Link", + "href" => url + } + ] + } + end + def attachments_from_ids(%{media_ids: ids, descriptions: desc}) do attachments_from_ids_descs(ids, desc) end @@ -36,11 +49,15 @@ defmodule Pleroma.Web.CommonAPI.Utils do def attachments_from_ids_no_descs([]), do: [] def attachments_from_ids_no_descs(ids) do - Enum.map(ids, fn media_id -> - case Repo.get(Object, media_id) do - %Object{data: data} -> data - _ -> nil - end + Enum.map(ids, fn + "http" <> _ = id -> + raw_url_to_attachment(id) + + media_id -> + case Repo.get(Object, media_id) do + %Object{data: data} -> data + _ -> nil + end end) |> Enum.reject(&is_nil/1) end @@ -50,10 +67,14 @@ defmodule Pleroma.Web.CommonAPI.Utils do def attachments_from_ids_descs(ids, descs_str) do {_, descs} = Jason.decode(descs_str) - Enum.map(ids, fn media_id -> - with %Object{data: data} <- Repo.get(Object, media_id) do - Map.put(data, "name", descs[media_id]) - end + Enum.map(ids, fn + "http" <> _ = media_id -> + raw_url_to_attachment(media_id, descs[media_id]) + + media_id -> + with %Object{data: data} <- Repo.get(Object, media_id) do + Map.put(data, "name", descs[media_id]) + end end) |> Enum.reject(&is_nil/1) end |