logo

pleroma

My custom branche(s) on git.pleroma.social/pleroma/pleroma git clone https://anongit.hacktivis.me/git/pleroma.git/
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:

Mlib/pleroma/web/activity_pub/object_validators/common_fixes.ex20++++++++++++++------
Mtest/pleroma/web/activity_pub/object_validators/article_note_page_validator_test.exs23+++++++++++++++++++++++
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)