]> git.mxchange.org Git - friendica.git/commitdiff
Issue 8586: Reduce the amount of item receivers
authorMichael <heluecht@pirati.ca>
Wed, 6 May 2020 15:20:49 +0000 (15:20 +0000)
committerMichael <heluecht@pirati.ca>
Wed, 6 May 2020 15:20:49 +0000 (15:20 +0000)
src/Protocol/Diaspora.php
src/Worker/Notifier.php

index 708f5335a53d5d4525ef3d86bfb662c8eb749108..7ab3d76da4432987d13b6f1fc4a72ff7ee9505e3 100644 (file)
@@ -252,24 +252,27 @@ class Diaspora
         * One of the parameters is a contact array.
         * This is done to avoid duplicates.
         *
-        * @param array $parent   The parent post
+        * @param array $item     Item that is about to be delivered
         * @param array $contacts The previously fetched contacts
         *
         * @return array of relay servers
         * @throws \Exception
         */
-       public static function participantsForThread(array $parent, array $contacts)
+       public static function participantsForThread(array $item, array $contacts)
        {
-               if (!in_array($parent['private'], [Item::PUBLIC, Item::UNLISTED])) {
+               if (!in_array($item['private'], [Item::PUBLIC, Item::UNLISTED]) || in_array($item["verb"], [Activity::FOLLOW, Activity::TAG])) {
                        return $contacts;
                }
 
-               $items = Item::select(['author-id'], ['parent' => $parent['id']], ['group_by' => ['author-id']]);
+               $items = Item::select(['author-id', 'author-link', 'parent-author-link'],
+                       ['parent' => $item['parent'], 'gravity' => [GRAVITY_COMMENT, GRAVITY_ACTIVITY]],
+                       ['group_by' => ['author-id']]);
                while ($item = DBA::fetch($items)) {
                        $contact = DBA::selectFirst('contact', ['id', 'url', 'name', 'protocol', 'batch', 'network'],
                                ['id' => $item['author-id']]);
-                       if (!DBA::isResult($contact)) {
-                               // Shouldn't happen
+                       if (!DBA::isResult($contact) || empty($contact['batch']) ||
+                               ($contact['network'] != Protocol::DIASPORA) ||
+                               Strings::compareLink($item['parent-author-link'], $item['author-link'])) {
                                continue;
                        }
 
@@ -281,7 +284,7 @@ class Diaspora
                        }
 
                        if (!$exists) {
-                               Logger::info('Add participant to receiver list', ['item' => $parent['guid'], 'participant' => $contact['url']]);
+                               Logger::info('Add participant to receiver list', ['parent' => $item['parent-guid'], 'item' => $item['guid'], 'participant' => $contact['url']]);
                                $contacts[] = $contact;
                        }
                }
index 34a4cdc023f37c825690a7b0822f5e2dae6b6e7d..07bb99df206847457546ac7d22f4bf9de554e81b 100644 (file)
@@ -437,7 +437,7 @@ class Notifier
 
                                // Fetch the participation list
                                // The function will ensure that there are no duplicates
-                               $relay_list = Diaspora::participantsForThread($parent, $relay_list);
+                               $relay_list = Diaspora::participantsForThread($target_item, $relay_list);
 
                                // Add the relay to the list, avoid duplicates.
                                // Don't send community posts to the relay. Forum posts via the Diaspora protocol are looking ugly.