diff --git a/src/Protocol/ActivityPub/Processor.php b/src/Protocol/ActivityPub/Processor.php index db8f28aa0c..30f6627ba3 100644 --- a/src/Protocol/ActivityPub/Processor.php +++ b/src/Protocol/ActivityPub/Processor.php @@ -980,7 +980,11 @@ class Processor if ($success) { Queue::remove($activity); - Queue::processReplyByUri($item['uri']); + + if (Queue::hasChildren($item['uri'])) { + //Queue::processReplyByUri($item['uri']); + Worker::add(PRIORITY_HIGH, 'ProcessReplyByUri', $item['uri']); + } } // Store send a follow request for every reshare - but only when the item had been stored diff --git a/src/Protocol/ActivityPub/Queue.php b/src/Protocol/ActivityPub/Queue.php index d47007eb13..b389626a3e 100644 --- a/src/Protocol/ActivityPub/Queue.php +++ b/src/Protocol/ActivityPub/Queue.php @@ -25,7 +25,6 @@ use Friendica\Core\Logger; use Friendica\Database\Database; use Friendica\Database\DBA; use Friendica\DI; -use Friendica\Protocol\ActivityPub; use Friendica\Util\DateTimeFormat; use Friendica\Util\JsonLD; @@ -242,15 +241,30 @@ class Queue * Process all activities that are children of a given post url * * @param string $uri - * @return void + * @return int */ - public static function processReplyByUri(string $uri) + public static function processReplyByUri(string $uri): int { + $count = 0; $entries = DBA::select('inbox-entry', ['id'], ["`in-reply-to-id` = ? AND `object-id` != ?", $uri, $uri]); while ($entry = DBA::fetch($entries)) { + $count += 1; self::process($entry['id']); } DBA::close($entries); + return $count; + } + + /** + * Checks if there are children of the given uri + * + * @param string $uri + * + * @return bool + */ + public static function hasChildren(string $uri): bool + { + return DBA::exists('inbox-entry', ["`in-reply-to-id` = ? AND `object-id` != ?", $uri, $uri]); } /** diff --git a/src/Worker/ProcessReplyByUri.php b/src/Worker/ProcessReplyByUri.php new file mode 100644 index 0000000000..000327b111 --- /dev/null +++ b/src/Worker/ProcessReplyByUri.php @@ -0,0 +1,42 @@ +. + * + */ + +namespace Friendica\Worker; + +use Friendica\Core\Logger; +use Friendica\Protocol\ActivityPub\Queue; + +class ProcessReplyByUri +{ + /** + * Process queued replies + * + * @param string $uri post url + * + * @return void + */ + public static function execute(string $uri) + { + Logger::info('Start processing queued replies', ['url' => $uri]); + $count = Queue::processReplyByUri($uri); + Logger::info('Successfully processed queued replies', ['count' => $count, 'url' => $uri]); + } +}