From 3b74d13147d8b8cef5cf487a75e45eb541899f54 Mon Sep 17 00:00:00 2001 From: mkljczk Date: Sat, 22 Feb 2025 18:31:26 +0100 Subject: [PATCH] Do not call LanguageDetector when not language is provided Signed-off-by: mkljczk --- .../object_validators/common_fixes.ex | 20 +++++++++++----- .../article_note_page_validator_test.exs | 23 +++++++++++++++++++ 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 index e5f3b0589..f0f3fef90 100644 --- 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 index 829598246..b64c554d8 100644 --- 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)