Merge downstream changes
Signed-off-by: mkljczk <git@mkljczk.pl>
This commit is contained in:
parent
013c60e13a
commit
d0dac30ac6
7 changed files with 57 additions and 3 deletions
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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"
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
}}
|
}}
|
||||||
|
|
||||||
_ ->
|
_ ->
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue