X-Git-Url: https://git.squeep.com/?a=blobdiff_plain;f=lib%2Fpleroma%2Fweb%2Fcommon_api%2Factivity_draft.ex;h=adddea669f59595415255f73cb5cec0854b39da9;hb=f86bf164300b7311160660970469efad5cfed3df;hp=ea88213fbdae41c28149857b92c2846bb4d088ef;hpb=cf0ad02ea961ae8cb6cc4f960afaeead58ecd4af;p=akkoma diff --git a/lib/pleroma/web/common_api/activity_draft.ex b/lib/pleroma/web/common_api/activity_draft.ex index ea88213fb..adddea669 100644 --- a/lib/pleroma/web/common_api/activity_draft.ex +++ b/lib/pleroma/web/common_api/activity_draft.ex @@ -22,6 +22,10 @@ defmodule Pleroma.Web.CommonAPI.ActivityDraft do attachments: [], in_reply_to: nil, in_reply_to_conversation: nil, + language: nil, + content_map: %{}, + quote_id: nil, + quote: nil, visibility: nil, expires_at: nil, extra: nil, @@ -54,7 +58,9 @@ defmodule Pleroma.Web.CommonAPI.ActivityDraft do |> with_valid(&in_reply_to/1) |> with_valid(&in_reply_to_conversation/1) |> with_valid(&visibility/1) + |> with_valid("e_id/1) |> content() + |> with_valid(&language/1) |> with_valid(&to_and_cc/1) |> with_valid(&context/1) |> sensitive() @@ -108,6 +114,39 @@ defmodule Pleroma.Web.CommonAPI.ActivityDraft do %__MODULE__{draft | in_reply_to_conversation: in_reply_to_conversation} end + defp quote_id(%{params: %{quote_id: ""}} = draft), do: draft + + defp quote_id(%{params: %{quote_id: id}} = draft) when is_binary(id) do + with {:activity, %Activity{} = quote} <- {:activity, Activity.get_by_id(id)}, + visibility <- CommonAPI.get_quoted_visibility(quote), + {:visibility, true} <- {:visibility, visibility in ["public", "unlisted"]} do + %__MODULE__{draft | quote: Activity.get_by_id(id)} + else + {:activity, _} -> + add_error(draft, dgettext("errors", "You can't quote a status that doesn't exist")) + + {:visibility, false} -> + add_error(draft, dgettext("errors", "You can only quote public or unlisted statuses")) + end + end + + defp quote_id(%{params: %{quote_id: %Activity{} = quote}} = draft) do + %__MODULE__{draft | quote: quote} + end + + defp quote_id(draft), do: draft + + defp language(%{params: %{language: language}, content_html: content} = draft) + when is_binary(language) do + if Pleroma.ISO639.valid_alpha2?(language) do + %__MODULE__{draft | content_map: %{language => content}} + else + add_error(draft, dgettext("errors", "Invalid language")) + end + end + + defp language(draft), do: draft + defp visibility(%{params: params} = draft) do case CommonAPI.get_visibility(params, draft.in_reply_to, draft.in_reply_to_conversation) do {visibility, "direct"} when visibility != "direct" -> @@ -152,7 +191,7 @@ defmodule Pleroma.Web.CommonAPI.ActivityDraft do end defp context(draft) do - context = Utils.make_context(draft.in_reply_to, draft.in_reply_to_conversation) + context = Utils.make_context(draft) %__MODULE__{draft | context: context} end @@ -196,9 +235,10 @@ defmodule Pleroma.Web.CommonAPI.ActivityDraft do |> Map.put("emoji", emoji) |> Map.put("source", %{ "content" => draft.status, - "mediaType" => draft.params[:content_type] + "mediaType" => Utils.get_content_type(draft.params[:content_type]) }) |> Map.put("generator", draft.params[:generator]) + |> Map.put("contentMap", draft.content_map) %__MODULE__{draft | object: object} end