 07a48b9293
			
		
	
	
		07a48b9293
		
	
	
	
	
		
			
			Co-authored-by: FloatingGhost <hannah@coffee-and-dreams.uk> Reviewed-on: https://akkoma.dev/AkkomaGang/akkoma/pulls/371
		
			
				
	
	
		
			51 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			Elixir
		
	
	
	
	
	
			
		
		
	
	
			51 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			Elixir
		
	
	
	
	
	
| defmodule Pleroma.Web.AkkomaAPI.TranslationController do
 | |
|   use Pleroma.Web, :controller
 | |
| 
 | |
|   alias Pleroma.Web.Plugs.OAuthScopesPlug
 | |
| 
 | |
|   require Logger
 | |
| 
 | |
|   @cachex Pleroma.Config.get([:cachex, :provider], Cachex)
 | |
| 
 | |
|   @unauthenticated_access %{fallback: :proceed_unauthenticated, scopes: []}
 | |
|   plug(
 | |
|     OAuthScopesPlug,
 | |
|     %{@unauthenticated_access | scopes: ["read:statuses"]}
 | |
|     when action in [
 | |
|            :languages
 | |
|          ]
 | |
|   )
 | |
| 
 | |
|   plug(Pleroma.Web.ApiSpec.CastAndValidate)
 | |
|   defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.TranslationOperation
 | |
| 
 | |
|   action_fallback(Pleroma.Web.MastodonAPI.FallbackController)
 | |
| 
 | |
|   @doc "GET /api/v1/akkoma/translation/languages"
 | |
|   def languages(conn, _params) do
 | |
|     with {:enabled, true} <- {:enabled, Pleroma.Config.get([:translator, :enabled])},
 | |
|          {:ok, source_languages, dest_languages} <- get_languages() do
 | |
|       conn
 | |
|       |> json(%{source: source_languages, target: dest_languages})
 | |
|     else
 | |
|       {:enabled, false} ->
 | |
|         json(conn, %{})
 | |
| 
 | |
|       e ->
 | |
|         Logger.error("Translation language list error: #{inspect(e)}")
 | |
|         {:error, e}
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   defp get_languages do
 | |
|     module = Pleroma.Config.get([:translator, :module])
 | |
| 
 | |
|     @cachex.fetch!(:translations_cache, "languages:#{module}}", fn _ ->
 | |
|       with {:ok, source_languages, dest_languages} <- module.languages() do
 | |
|         {:ok, source_languages, dest_languages}
 | |
|       else
 | |
|         {:error, err} -> {:ignore, {:error, err}}
 | |
|       end
 | |
|     end)
 | |
|   end
 | |
| end
 |