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,
|> 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()
%__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" ->
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
|> 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