ca9b4b64a9f067a537ebd419d47b4b6d28a9c90f
[akkoma] / lib / pleroma / web / akkoma_api / controllers / translation_controller.ex
1 defmodule Pleroma.Web.AkkomaAPI.TranslationController do
2 use Pleroma.Web, :controller
3
4 alias Pleroma.Web.Plugs.OAuthScopesPlug
5
6 @cachex Pleroma.Config.get([:cachex, :provider], Cachex)
7
8 @unauthenticated_access %{fallback: :proceed_unauthenticated, scopes: []}
9 plug(
10 OAuthScopesPlug,
11 %{@unauthenticated_access | scopes: ["read:statuses"]}
12 when action in [
13 :languages
14 ]
15 )
16
17 plug(Pleroma.Web.ApiSpec.CastAndValidate)
18 defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.TranslationOperation
19
20 action_fallback(Pleroma.Web.MastodonAPI.FallbackController)
21
22 @doc "GET /api/v1/akkoma/translation/languages"
23 def languages(conn, _params) do
24 with {:enabled, true} <- {:enabled, Pleroma.Config.get([:translator, :enabled])},
25 {:ok, source_languages, dest_languages} <- get_languages() do
26 conn
27 |> json(%{source: source_languages, target: dest_languages})
28 else
29 {:enabled, false} -> json(conn, %{})
30 e -> IO.inspect(e)
31 end
32 end
33
34 defp get_languages do
35 module = Pleroma.Config.get([:translator, :module])
36
37 @cachex.fetch!(:translations_cache, "languages:#{module}}", fn _ ->
38 with {:ok, source_languages, dest_languages} <- module.languages() do
39 {:ok, source_languages, dest_languages}
40 else
41 {:error, err} -> {:ignore, {:error, err}}
42 end
43 end)
44 end
45 end