Deduplicate translations code

Signed-off-by: nicole mikołajczyk <git@mkljczk.pl>
This commit is contained in:
nicole mikołajczyk 2025-12-15 23:33:28 +01:00 committed by Oneric
commit d65758d8f7

View file

@ -536,26 +536,33 @@ defmodule Pleroma.Web.MastodonAPI.StatusController do
@doc "POST /api/v1/statuses/:id/translate"
def translate(%{assigns: %{user: user}, body_params: params} = conn, %{id: id}) do
with {:enabled, true} <- {:enabled, Config.get([:translator, :enabled])},
%Activity{} = activity <- Activity.get_by_id_with_object(id),
{:visible, true} <- {:visible, Visibility.visible_for_user?(activity, user)},
translation_module <- Config.get([:translator, :module]),
{:ok, detected, translation} <-
fetch_or_translate(
activity.id,
activity.object.data["content"],
with {:ok, translation} <-
do_translate(
id,
user,
Map.get(params, :source_lang, nil),
Map.get(params, :lang, nil),
translation_module
Map.get(params, :lang, nil)
) do
json(
conn,
%{
content: translation,
detected_source_language: detected,
provider: translation_module.name()
}
)
json(conn, translation)
else
{:enabled, false} ->
conn
|> put_status(:forbidden)
|> json(%{"error" => "Translation is not enabled"})
{:visible, false} ->
{:error, :not_found}
e ->
e
end
end
@doc "GET /api/v1/statuses/:id/translations/:language"
def translate_legacy(%{assigns: %{user: user}} = conn, %{id: id, language: language} = params) do
with {:ok, %{content: translation, detected_source_language: detected}} <-
do_translate(id, user, Map.get(params, :from, nil), language) do
json(conn, %{detected_language: detected, text: translation})
else
{:enabled, false} ->
conn
@ -570,8 +577,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusController do
end
end
@doc "GET /api/v1/statuses/:id/translations/:language"
def translate_legacy(%{assigns: %{user: user}} = conn, %{id: id, language: language} = params) do
defp do_translate(id, user, source_language, target_language) do
with {:enabled, true} <- {:enabled, Config.get([:translator, :enabled])},
%Activity{} = activity <- Activity.get_by_id_with_object(id),
{:visible, true} <- {:visible, Visibility.visible_for_user?(activity, user)},
@ -580,22 +586,16 @@ defmodule Pleroma.Web.MastodonAPI.StatusController do
fetch_or_translate(
activity.id,
activity.object.data["content"],
Map.get(params, :from, nil),
language,
source_language,
target_language,
translation_module
) do
json(conn, %{detected_language: detected, text: translation})
else
{:enabled, false} ->
conn
|> put_status(:bad_request)
|> json(%{"error" => "Translation is not enabled"})
{:visible, false} ->
{:error, :not_found}
e ->
e
{:ok,
%{
content: translation,
detected_source_language: detected,
provider: translation_module.name()
}}
end
end