]> git.mxchange.org Git - friendica.git/commitdiff
Create event for detect_languages hook
authorArt4 <art4@wlabs.de>
Mon, 17 Mar 2025 09:17:13 +0000 (09:17 +0000)
committerArt4 <art4@wlabs.de>
Mon, 17 Mar 2025 09:17:13 +0000 (09:17 +0000)
src/Core/Hooks/HookEventBridge.php
src/Event/ArrayFilterEvent.php
src/Model/Item.php
tests/Unit/Core/Hooks/HookEventBridgeTest.php
tests/Unit/Event/ArrayFilterEventTest.php

index 8d53df417fb28883ff4b0f046587be3e2bd47cd8..2406fb70372612de59842b0a949cc4994f65c9b9 100644 (file)
@@ -56,6 +56,7 @@ final class HookEventBridge
                ArrayFilterEvent::NETWORK_TO_NAME                 => 'network_to_name',
                ArrayFilterEvent::CONVERSATION_START              => 'conversation_start',
                ArrayFilterEvent::DISPLAY_ITEM                    => 'display_item',
+               ArrayFilterEvent::DETECT_LANGUAGES                => 'detect_languages',
                ArrayFilterEvent::RENDER_LOCATION                 => 'render_location',
                ArrayFilterEvent::ITEM_PHOTO_MENU                 => 'item_photo_menu',
                ArrayFilterEvent::CONTACT_PHOTO_MENU              => 'contact_photo_menu',
@@ -118,6 +119,7 @@ final class HookEventBridge
                        ArrayFilterEvent::NETWORK_TO_NAME                 => 'onArrayFilterEvent',
                        ArrayFilterEvent::CONVERSATION_START              => 'onArrayFilterEvent',
                        ArrayFilterEvent::DISPLAY_ITEM                    => 'onArrayFilterEvent',
+                       ArrayFilterEvent::DETECT_LANGUAGES                => 'onArrayFilterEvent',
                        ArrayFilterEvent::RENDER_LOCATION                 => 'onArrayFilterEvent',
                        ArrayFilterEvent::ITEM_PHOTO_MENU                 => 'onArrayFilterEvent',
                        ArrayFilterEvent::CONTACT_PHOTO_MENU              => 'onArrayFilterEvent',
index f29acad95297940ecb8cdae0a5f123f38d61abb1..44aa403b18b5bef699dcb346d78720a67426311a 100644 (file)
@@ -62,6 +62,8 @@ final class ArrayFilterEvent extends Event
 
        public const DISPLAY_ITEM = 'friendica.data.display_item';
 
+       public const DETECT_LANGUAGES = 'friendica.data.detect_languages';
+
        public const RENDER_LOCATION = 'friendica.data.render_location';
 
        public const ITEM_PHOTO_MENU = 'friendica.data.item_photo_menu';
index 6c8be7528e659d1eb20a1f70b2756c1db342f134..954c0ce11cdcb87db736cd45faa267e0ceb96b49 100644 (file)
@@ -1903,18 +1903,23 @@ class Item
 
                $result = [];
 
+               $eventDispatcher = DI::eventDispatcher();
+
                foreach (self::splitByBlocks($searchtext) as $block) {
                        $languages = $ld->detect($block)->close() ?: [];
 
-                       $data = [
+                       $hook_data = [
                                'text'      => $block,
                                'detected'  => $languages,
                                'uri-id'    => $uri_id,
                                'author-id' => $author_id,
                        ];
-                       Hook::callAll('detect_languages', $data);
 
-                       foreach ($data['detected'] as $language => $quality) {
+                       $hook_data = $eventDispatcher->dispatch(
+                               new ArrayFilterEvent(ArrayFilterEvent::DETECT_LANGUAGES, $hook_data),
+                       )->getArray();
+
+                       foreach ($hook_data['detected'] as $language => $quality) {
                                $result[$language] = max($result[$language] ?? 0, $quality * (strlen($block) / strlen($searchtext)));
                        }
                }
index 17291539a76d4ee09093cb9784d5fab68acea474..e0e9a3eb8e80cce3c8de5db947148cf8637c3fa0 100644 (file)
@@ -45,6 +45,7 @@ class HookEventBridgeTest extends TestCase
                        ArrayFilterEvent::NETWORK_TO_NAME                 => 'onArrayFilterEvent',
                        ArrayFilterEvent::CONVERSATION_START              => 'onArrayFilterEvent',
                        ArrayFilterEvent::DISPLAY_ITEM                    => 'onArrayFilterEvent',
+                       ArrayFilterEvent::DETECT_LANGUAGES                => 'onArrayFilterEvent',
                        ArrayFilterEvent::RENDER_LOCATION                 => 'onArrayFilterEvent',
                        ArrayFilterEvent::ITEM_PHOTO_MENU                 => 'onArrayFilterEvent',
                        ArrayFilterEvent::CONTACT_PHOTO_MENU              => 'onArrayFilterEvent',
@@ -351,6 +352,7 @@ class HookEventBridgeTest extends TestCase
                        [ArrayFilterEvent::NETWORK_TO_NAME, 'network_to_name'],
                        [ArrayFilterEvent::CONVERSATION_START, 'conversation_start'],
                        [ArrayFilterEvent::DISPLAY_ITEM, 'display_item'],
+                       [ArrayFilterEvent::DETECT_LANGUAGES, 'detect_languages'],
                        [ArrayFilterEvent::RENDER_LOCATION, 'render_location'],
                        [ArrayFilterEvent::ITEM_PHOTO_MENU, 'item_photo_menu'],
                        [ArrayFilterEvent::CONTACT_PHOTO_MENU, 'contact_photo_menu'],
index 5af49e9fb89fd2283e5d2d64cf06510142765e52..d079cacdec631d645f9a122acedbed8d1766ad0a 100644 (file)
@@ -42,6 +42,7 @@ class ArrayFilterEventTest extends TestCase
                        [ArrayFilterEvent::NETWORK_TO_NAME, 'friendica.data.network_to_name'],
                        [ArrayFilterEvent::CONVERSATION_START, 'friendica.data.conversation_start'],
                        [ArrayFilterEvent::DISPLAY_ITEM, 'friendica.data.display_item'],
+                       [ArrayFilterEvent::DETECT_LANGUAGES, 'friendica.data.detect_languages'],
                        [ArrayFilterEvent::RENDER_LOCATION, 'friendica.data.render_location'],
                        [ArrayFilterEvent::ITEM_PHOTO_MENU, 'friendica.data.item_photo_menu'],
                        [ArrayFilterEvent::CONTACT_PHOTO_MENU, 'friendica.data.contact_photo_menu'],