]> git.mxchange.org Git - friendica.git/commitdiff
Store conversation data directly from the AP receiver
authorMichael <heluecht@pirati.ca>
Thu, 11 Oct 2018 20:08:04 +0000 (20:08 +0000)
committerMichael <heluecht@pirati.ca>
Thu, 11 Oct 2018 20:08:04 +0000 (20:08 +0000)
src/Protocol/ActivityPub/Processor.php
src/Protocol/ActivityPub/Receiver.php

index 69da8b7e5cea2f15a5c95995a8d8667e587464b7..5d2d7fe1162def9100d99c298e8a9bdcdc1b2a21 100644 (file)
@@ -107,9 +107,8 @@ class Processor
         * Prepares data for a message
         *
         * @param array  $activity Activity array
-        * @param string $body     original source
         */
-       public static function createItem($activity, $body)
+       public static function createItem($activity)
        {
                $item = [];
                $item['verb'] = ACTIVITY_POST;
@@ -128,16 +127,15 @@ class Processor
                        self::fetchMissingActivity($activity['reply-to-id'], $activity);
                }
 
-               self::postItem($activity, $item, $body);
+               self::postItem($activity, $item);
        }
 
        /**
         * Prepare the item array for a "like"
         *
         * @param array  $activity Activity array
-        * @param string $body     original source
         */
-       public static function likeItem($activity, $body)
+       public static function likeItem($activity)
        {
                $item = [];
                $item['verb'] = ACTIVITY_LIKE;
@@ -145,7 +143,7 @@ class Processor
                $item['gravity'] = GRAVITY_ACTIVITY;
                $item['object-type'] = ACTIVITY_OBJ_NOTE;
 
-               self::postItem($activity, $item, $body);
+               self::postItem($activity, $item);
        }
 
        /**
@@ -165,9 +163,8 @@ class Processor
         * Prepare the item array for a "dislike"
         *
         * @param array  $activity Activity array
-        * @param string $body     original source
         */
-       public static function dislikeItem($activity, $body)
+       public static function dislikeItem($activity)
        {
                $item = [];
                $item['verb'] = ACTIVITY_DISLIKE;
@@ -175,7 +172,7 @@ class Processor
                $item['gravity'] = GRAVITY_ACTIVITY;
                $item['object-type'] = ACTIVITY_OBJ_NOTE;
 
-               self::postItem($activity, $item, $body);
+               self::postItem($activity, $item);
        }
 
        /**
@@ -183,9 +180,8 @@ class Processor
         *
         * @param array  $activity Activity data
         * @param array  $item     item array
-        * @param string $body     original source
         */
-       private static function postItem($activity, $item, $body)
+       private static function postItem($activity, $item)
        {
                /// @todo What to do with $activity['context']?
 
@@ -226,11 +222,6 @@ class Processor
                        $item['body'] = $activity['source'];
                }
 
-               $item['protocol'] = Conversation::PARCEL_ACTIVITYPUB;
-               $item['source'] = $body;
-               $item['conversation-href'] = $activity['context'];
-               $item['conversation-uri'] = $activity['conversation'];
-
                foreach ($activity['receiver'] as $receiver) {
                        $item['uid'] = $receiver;
                        $item['contact-id'] = Contact::getIdForURL($activity['author'], $receiver, true);
index f371eede7fe4b048f611447b0b2a98bbea53df9e..f54503708be603b7245112b0cc221c6f9c8dcc08 100644 (file)
@@ -14,6 +14,8 @@ use Friendica\Model\User;
 use Friendica\Util\JsonLD;
 use Friendica\Util\LDSignature;
 use Friendica\Protocol\ActivityPub;
+use Friendica\Model\Conversation;
+use Friendica\Util\DateTimeFormat;
 
 /**
  * @brief ActivityPub Receiver Protocol class
@@ -229,6 +231,32 @@ class Receiver
                return $object_data;
        }
 
+       /**
+        * Store the unprocessed data into the conversation table
+        * This has to be done outside the regular function,
+        * since we store everything - not only item posts.
+        *
+        * @param array  $activity Array with activity data
+        * @param string $body     The raw message
+        */
+       private static function storeConversation($activity, $body)
+       {
+               if (empty($body) || empty($activity['id'])) {
+                       return;
+               }
+
+               $conversation = [
+                       'protocol' => Conversation::PARCEL_ACTIVITYPUB,
+                       'item-uri' => $activity['id'],
+                       'reply-to-uri' => defaults($activity, 'reply-to-id', ''),
+                       'conversation-href' => defaults($activity, 'context', ''),
+                       'conversation-uri' => defaults($activity, 'conversation', ''),
+                       'source' => $body,
+                       'received' => DateTimeFormat::utcNow()];
+
+               DBA::insert('conversation', $conversation, true);
+       }
+
        /**
         * Processes the activity object
         *
@@ -268,6 +296,8 @@ class Receiver
                        return;
                }
 
+               self::storeConversation($object_data, $body);
+
                // Internal flag for thread completion. See Processor.php
                if (!empty($activity['thread-completion'])) {
                        $object_data['thread-completion'] = $activity['thread-completion'];
@@ -276,15 +306,15 @@ class Receiver
                switch ($type) {
                        case 'as:Create':
                        case 'as:Announce':
-                               ActivityPub\Processor::createItem($object_data, $body);
+                               ActivityPub\Processor::createItem($object_data);
                                break;
 
                        case 'as:Like':
-                               ActivityPub\Processor::likeItem($object_data, $body);
+                               ActivityPub\Processor::likeItem($object_data);
                                break;
 
                        case 'as:Dislike':
-                               ActivityPub\Processor::dislikeItem($object_data, $body);
+                               ActivityPub\Processor::dislikeItem($object_data);
                                break;
 
                        case 'as:Update':