]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - plugins/OStatus/lib/ostatusqueuehandler.php
Merge remote-tracking branch 'upstream/master' into social-master
[quix0rs-gnu-social.git] / plugins / OStatus / lib / ostatusqueuehandler.php
index 568e8fe391f318c29046491b8a03298eee522ed7..964580cf49a208b8e2129857f8cc20a78587d468 100644 (file)
@@ -51,42 +51,62 @@ class OStatusQueueHandler extends QueueHandler
         assert($notice instanceof Notice);
 
         $this->notice = $notice;
-        $this->user = User::staticGet('id', $notice->profile_id);
+        $this->user = User::getKV('id', $notice->profile_id);
 
-        $this->pushUser();
+        try {
+            $profile = $this->notice->getProfile();
+        } catch (Exception $e) {
+            common_log(LOG_ERR, "Can't get profile for notice; skipping: " . $e->getMessage());
+            return true;
+        }
+
+        if ($notice->isLocal()) {
+            // Notices generated on remote sites will have already
+            // been pushed to user's subscribers by their origin sites.
+            $this->pushUser();
+        }
 
         foreach ($notice->getGroups() as $group) {
-            $oprofile = Ostatus_profile::staticGet('group_id', $group->id);
+            $oprofile = Ostatus_profile::getKV('group_id', $group->id);
             if ($oprofile) {
-                $this->pingReply($oprofile);
+                // remote group
+                if ($notice->isLocal()) {
+                    $this->pingReply($oprofile);
+                }
             } else {
+                // local group
                 $this->pushGroup($group->id);
             }
         }
-        
-        foreach ($notice->getReplies() as $profile_id) {
-            $oprofile = Ostatus_profile::staticGet('profile_id', $profile_id);
-            if ($oprofile) {
-                $this->pingReply($oprofile);
+
+        if ($notice->isLocal()) {
+            // Notices generated on other sites will have already
+            // pinged their reply-targets.
+
+            foreach ($notice->getReplies() as $profile_id) {
+                $oprofile = Ostatus_profile::getKV('profile_id', $profile_id);
+                if ($oprofile) {
+                    $this->pingReply($oprofile);
+                }
             }
-        }
 
-        if (!empty($this->notice->reply_to)) {
-            $replyTo = Notice::staticGet('id', $this->notice->reply_to);
-            if (!empty($replyTo)) {
-                foreach($replyTo->getReplies() as $profile_id) {
-                    $oprofile = Ostatus_profile::staticGet('profile_id', $profile_id);
-                    if ($oprofile) {
-                        $this->pingReply($oprofile);
+            if (!empty($this->notice->reply_to)) {
+                $replyTo = Notice::getKV('id', $this->notice->reply_to);
+                if (!empty($replyTo)) {
+                    foreach($replyTo->getReplies() as $profile_id) {
+                        $oprofile = Ostatus_profile::getKV('profile_id', $profile_id);
+                        if ($oprofile) {
+                            $this->pingReply($oprofile);
+                        }
                     }
                 }
             }
-        }
 
-        foreach ($notice->getProfileTags() as $ptag) {
-            $oprofile = Ostatus_profile::staticGet('peopletag_id', $ptag->id);
-            if (!$oprofile) {
-                $this->pushPeopletag($ptag);
+            foreach ($notice->getProfileTags() as $ptag) {
+                $oprofile = Ostatus_profile::getKV('peopletag_id', $ptag->id);
+                if (!$oprofile) {
+                    $this->pushPeopletag($ptag);
+                }
             }
         }
 
@@ -126,14 +146,14 @@ class OStatusQueueHandler extends QueueHandler
         $this->pushFeed($feed, array($this, 'peopletagFeedForNotice'), $ptag);
     }
 
-    function pingReply($oprofile)
+    function pingReply(OStatus_profile $oprofile)
     {
         if ($this->user) {
             // For local posts, send a Salmon ping to the mentioned
             // remote user or group.
             // @fixme as an optimization we can skip this if the
             // remote profile is subscribed to the author.
-            $oprofile->notifyDeferred($this->notice, $this->user);
+            $oprofile->notifyDeferred($this->notice, $this->user->getProfile());
         }
     }
 
@@ -236,7 +256,7 @@ class OStatusQueueHandler extends QueueHandler
 
     function groupFeedForNotice($group_id)
     {
-        $group = User_group::staticGet('id', $group_id);
+        $group = User_group::getKV('id', $group_id);
 
         $atom = new AtomGroupNoticeFeed($group);
         $atom->addEntryFromNotice($this->notice);