Allow listing languages, setting source language (#192)
[akkoma] / lib / pleroma / web / mastodon_api / controllers / status_controller.ex
index d9b93ca5e8fb56ec74c13e068c426b8728b48960..41fbd7acf2f910e8a8ec47a01e7bec9af70e7a37 100644 (file)
@@ -422,7 +422,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusController do
   end
 
   @doc "GET /api/v1/statuses/:id/translations/:language"
-  def translate(%{assigns: %{user: user}} = conn, %{id: id, language: language}) do
+  def translate(%{assigns: %{user: user}} = conn, %{id: id, language: language} = params) 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)},
@@ -431,6 +431,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusController do
            fetch_or_translate(
              activity.id,
              activity.object.data["content"],
+             Map.get(params, :from, nil),
              language,
              translation_module
            ) do
@@ -449,16 +450,20 @@ defmodule Pleroma.Web.MastodonAPI.StatusController do
     end
   end
 
-  defp fetch_or_translate(status_id, text, language, translation_module) do
-    @cachex.fetch!(:user_cache, "translations:#{status_id}:#{language}", fn _ ->
-      value = translation_module.translate(text, language)
-
-      with {:ok, _, _} <- value do
-        value
-      else
-        _ -> {:ignore, value}
+  defp fetch_or_translate(status_id, text, source_language, target_language, translation_module) do
+    @cachex.fetch!(
+      :translations_cache,
+      "translations:#{status_id}:#{source_language}:#{target_language}",
+      fn _ ->
+        value = translation_module.translate(text, source_language, target_language)
+
+        with {:ok, _, _} <- value do
+          value
+        else
+          _ -> {:ignore, value}
+        end
       end
-    end)
+    )
   end
 
   defp put_application(params, %{assigns: %{token: %Token{user: %User{} = user} = token}} = _conn) do