Merge downstream changes

Signed-off-by: mkljczk <git@mkljczk.pl>
This commit is contained in:
mkljczk 2025-02-22 15:53:44 +01:00
commit d0dac30ac6
7 changed files with 57 additions and 3 deletions

View file

@ -189,7 +189,23 @@ defmodule Pleroma.ApplicationRequirements do
false false
end end
if Enum.all?([preview_proxy_commands_status | filter_commands_statuses], & &1) do translation_commands_status =
if Pleroma.Language.Translation.missing_dependencies() == [] do
true
else
Logger.error(
"The following dependencies required by the currently enabled " <>
"translation provider are not installed: " <>
inspect(Pleroma.Language.Translation.missing_dependencies())
)
false
end
if Enum.all?(
[preview_proxy_commands_status, translation_commands_status | filter_commands_statuses],
& &1
) do
:ok :ok
else else
{:error, {:error,

View file

@ -11,6 +11,16 @@ defmodule Pleroma.Language.Translation do
!!provider and provider.configured? !!provider and provider.configured?
end end
def missing_dependencies do
provider = get_provider()
if provider do
provider.missing_dependencies()
else
[]
end
end
def translate(text, source_language, target_language) do def translate(text, source_language, target_language) do
cache_key = get_cache_key(text, source_language, target_language) cache_key = get_cache_key(text, source_language, target_language)
@ -23,6 +33,7 @@ defmodule Pleroma.Language.Translation do
{:error, :not_found} {:error, :not_found}
else else
provider.translate(text, source_language, target_language) provider.translate(text, source_language, target_language)
|> scrub_html()
end end
store_result(result, cache_key) store_result(result, cache_key)
@ -102,4 +113,15 @@ defmodule Pleroma.Language.Translation do
defp store_result(_, _), do: nil defp store_result(_, _), do: nil
defp content_hash(text), do: :crypto.hash(:sha256, text) |> Base.encode64() defp content_hash(text), do: :crypto.hash(:sha256, text) |> Base.encode64()
defp scrub_html({:ok, %{content: content} = result}) when is_binary(content) do
scrubbers = Pleroma.Config.get([:markup, :scrub_policy])
content
|> Pleroma.HTML.filter_tags(scrubbers)
{:ok, %{result | content: content}}
end
defp scrub_html(result), do: result
end end

View file

@ -7,6 +7,8 @@ defmodule Pleroma.Language.Translation.Deepl do
alias Pleroma.Language.Translation.Provider alias Pleroma.Language.Translation.Provider
use Provider
@behaviour Provider @behaviour Provider
@name "DeepL" @name "DeepL"

View file

@ -7,6 +7,8 @@ defmodule Pleroma.Language.Translation.Libretranslate do
alias Pleroma.Language.Translation.Provider alias Pleroma.Language.Translation.Provider
use Provider
@behaviour Provider @behaviour Provider
@name "LibreTranslate" @name "LibreTranslate"
@ -44,7 +46,7 @@ defmodule Pleroma.Language.Translation.Libretranslate do
%{ %{
content: content, content: content,
detected_source_language: source_language, detected_source_language: source_language,
provider: "LibreTranslate" provider: @name
}} }}
_ -> _ ->

View file

@ -3,6 +3,10 @@
# SPDX-License-Identifier: AGPL-3.0-only # SPDX-License-Identifier: AGPL-3.0-only
defmodule Pleroma.Language.Translation.Provider do defmodule Pleroma.Language.Translation.Provider do
alias Pleroma.Language.Translation.Provider
@callback missing_dependencies() :: [String.t()]
@callback configured?() :: boolean() @callback configured?() :: boolean()
@callback translate( @callback translate(
@ -24,4 +28,13 @@ defmodule Pleroma.Language.Translation.Provider do
@callback languages_matrix() :: {:ok, Map.t()} | {:error, atom()} @callback languages_matrix() :: {:ok, Map.t()} | {:error, atom()}
@callback name() :: String.t() @callback name() :: String.t()
defmacro __using__(_opts) do
quote do
@impl Provider
def missing_dependencies, do: []
defoverridable missing_dependencies: 0
end
end
end end

View file

@ -2,7 +2,6 @@ defmodule Pleroma.Language.TranslationTest do
use Pleroma.Web.ConnCase use Pleroma.Web.ConnCase
alias Pleroma.Language.Translation alias Pleroma.Language.Translation
# use Oban.Testing, repo: Pleroma.Repo
setup do: clear_config([Pleroma.Language.Translation, :provider], TranslationMock) setup do: clear_config([Pleroma.Language.Translation, :provider], TranslationMock)