commit: 3b74d13147d8b8cef5cf487a75e45eb541899f54
parent d7f9d30b2cad51fa2a9acb1ae02091b3140f829b
Author: mkljczk <git@mkljczk.pl>
Date: Sat, 22 Feb 2025 18:31:26 +0100
Do not call LanguageDetector when not language is provided
Signed-off-by: mkljczk <git@mkljczk.pl>
Diffstat:
2 files changed, 37 insertions(+), 6 deletions(-)
diff --git a/lib/pleroma/web/activity_pub/object_validators/common_fixes.ex b/lib/pleroma/web/activity_pub/object_validators/common_fixes.ex
@@ -152,11 +152,19 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.CommonFixes do
def maybe_add_language(object) do
language =
[
- get_language_from_context(object),
- get_language_from_content_map(object),
- get_language_from_content(object)
+ &get_language_from_context/1,
+ &get_language_from_content_map/1,
+ &get_language_from_content/1
]
- |> Enum.find(&good_locale_code?(&1))
+ |> Enum.find_value(fn get_language ->
+ language = get_language.(object)
+
+ if good_locale_code?(language) do
+ language
+ else
+ nil
+ end
+ end)
if language do
Map.put(object, "language", language)
@@ -189,8 +197,8 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.CommonFixes do
defp get_language_from_content_map(_), do: nil
- defp get_language_from_content(%{"summary" => summary, "content" => content}) do
- LanguageDetector.detect("#{summary} #{content}")
+ defp get_language_from_content(%{"content" => content} = object) do
+ LanguageDetector.detect("#{object["summary"] || ""} #{content}")
end
defp get_language_from_content(_), do: nil
diff --git a/test/pleroma/web/activity_pub/object_validators/article_note_page_validator_test.exs b/test/pleroma/web/activity_pub/object_validators/article_note_page_validator_test.exs
@@ -9,6 +9,7 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.ArticleNotePageValidatorTest
alias Pleroma.Web.ActivityPub.ObjectValidators.ArticleNotePageValidator
alias Pleroma.Web.ActivityPub.Utils
+ import Mock
import Pleroma.Factory
describe "Notes" do
@@ -234,6 +235,28 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.ArticleNotePageValidatorTest
assert object.language == "pl"
end
+ test_with_mock "it doesn't call LanguageDetector when language is specified",
+ Pleroma.Language.LanguageDetector,
+ detect: fn _ -> nil end do
+ user = insert(:user)
+
+ note = %{
+ "to" => ["https://www.w3.org/ns/activitystreams#Public"],
+ "cc" => [],
+ "id" => Utils.generate_object_id(),
+ "type" => "Note",
+ "content" => "a post in English",
+ "contentMap" => %{
+ "en" => "a post in English"
+ },
+ "attributedTo" => user.ap_id
+ }
+
+ ArticleNotePageValidator.cast_and_apply(note)
+
+ refute called(Pleroma.Language.LanguageDetector.detect(:_))
+ end
+
test "it adds contentMap if language is specified" do
user = insert(:user)