X-Git-Url: http://git.squeep.com/?a=blobdiff_plain;f=lib%2Fpleroma%2Fweb%2Fcommon_api%2Factivity_draft.ex;h=ced6371d6c7da0f8a2d039aa6d284cdb4cd2c62d;hb=62e22eeff23b8841e3cdc7e4a4ee6ef29b612aca;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..ced6371d6 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,42 @@ 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(%{content_html: content} = draft) do + # Use a default language if no language is specified + %__MODULE__{draft | content_map: %{"en" => content}} + end + 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 +194,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 +238,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