]> git.mxchange.org Git - friendica.git/blobdiff - src/Protocol/ActivityPub/Processor.php
Avoid to provess the same activity
[friendica.git] / src / Protocol / ActivityPub / Processor.php
index 73f414d73c40a82ef01ff508af291a4f48be57e7..92aa3b783334decb05b2aee759d66bd595d57f79 100644 (file)
@@ -59,6 +59,23 @@ class Processor
 {
        const CACHEKEY_FETCH_ACTIVITY = 'processor:fetchMissingActivity:';
        const CACHEKEY_JUST_FETCHED   = 'processor:isJustFetched:';
+
+       static $processed = [];
+
+       public static function addActivityId(string $id)
+       {
+               self::$processed[] = $id;
+               if (count(self::$processed) > 100) {
+                       self::$processed = array_slice(self::$processed, 1);
+               }
+               print_r(self::$processed);
+       }
+
+       public static function isProcessed(string $id): bool
+       {
+               return in_array($id, self::$processed);
+       }
+
        /**
         * Extracts the tag character (#, @, !) from mention links
         *
@@ -275,6 +292,13 @@ class Processor
         */
        public static function createItem(array $activity, bool $fetch_parents = true): array
        {
+               if (self::isProcessed($activity['id'])) {
+                       Logger::info('Id is already processed', ['id' => $activity['id']]);
+                       return [];
+               }
+
+               self::addActivityId($activity['id']);
+
                $item = [];
                $item['verb'] = Activity::POST;
                $item['thr-parent'] = $activity['reply-to-id'];
@@ -308,6 +332,10 @@ class Processor
                        return [];
                }
 
+               if (!DI::config()->get('system', 'fetch_parents')) {
+                       $fetch_parents = false;
+               }
+
                if ($fetch_parents && empty($activity['directmessage']) && ($activity['id'] != $activity['reply-to-id']) && !Post::exists(['uri' => $activity['reply-to-id']])) {
                        $result = self::fetchParent($activity);
                        if (!empty($result)) {
@@ -1050,7 +1078,7 @@ class Processor
 
                Queue::remove($activity);
 
-               if ($success && Queue::hasChildren($item['uri'])) {
+               if ($success && Queue::hasChildren($item['uri']) && Post::exists(['uri' => $item['uri']])) {
                        Queue::processReplyByUri($item['uri']);
                }