X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=plugins%2FOStatus%2Flib%2Fostatusqueuehandler.php;h=964580cf49a208b8e2129857f8cc20a78587d468;hb=d6b28c64830f632bb2f4b6f3c9369b9e56ad217a;hp=568e8fe391f318c29046491b8a03298eee522ed7;hpb=8884a5255fb90fda67b63fa0d4252d77176337e5;p=quix0rs-gnu-social.git diff --git a/plugins/OStatus/lib/ostatusqueuehandler.php b/plugins/OStatus/lib/ostatusqueuehandler.php index 568e8fe391..964580cf49 100644 --- a/plugins/OStatus/lib/ostatusqueuehandler.php +++ b/plugins/OStatus/lib/ostatusqueuehandler.php @@ -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);