Correctly distribute notices from remote posters through local groups to remote group-members via OStatus.
Allow the OStatus queue-handler to handle all posts, and give it the smarts required to make correct decisions about whether it should or shouldn't relay notices over OStatus. cf. http://status.net/open-source/issues/3540 Conflicts (staticGet => getKV): plugins/OStatus/lib/ostatusqueuehandler.php
This commit is contained in:
parent
8e53eb2b4c
commit
44f7ad612a
|
@ -125,18 +125,14 @@ class OStatusPlugin extends Plugin
|
|||
*/
|
||||
function onStartEnqueueNotice($notice, &$transports)
|
||||
{
|
||||
if ($notice->isLocal()) {
|
||||
if ($notice->inScope(null)) {
|
||||
// put our transport first, in case there's any conflict (like OMB)
|
||||
array_unshift($transports, 'ostatus');
|
||||
$this->log(LOG_INFO, "Notice {$notice->id} queued for OStatus processing");
|
||||
} else {
|
||||
// FIXME: we don't do privacy-controlled OStatus updates yet.
|
||||
// once that happens, finer grain of control here.
|
||||
$this->log(LOG_NOTICE, "Not queueing notice {$notice->id} for OStatus because of privacy; scope = {$notice->scope}");
|
||||
}
|
||||
if ($notice->inScope(null)) {
|
||||
// put our transport first, in case there's any conflict (like OMB)
|
||||
array_unshift($transports, 'ostatus');
|
||||
$this->log(LOG_INFO, "Notice {$notice->id} queued for OStatus processing");
|
||||
} else {
|
||||
$this->log(LOG_NOTICE, "Not queueing notice {$notice->id} for OStatus because it's not local.");
|
||||
// FIXME: we don't do privacy-controlled OStatus updates yet.
|
||||
// once that happens, finer grain of control here.
|
||||
$this->log(LOG_NOTICE, "Not queueing notice {$notice->id} for OStatus because of privacy; scope = {$notice->scope}");
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -60,40 +60,53 @@ class OStatusQueueHandler extends QueueHandler
|
|||
return true;
|
||||
}
|
||||
|
||||
$this->pushUser();
|
||||
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::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::getKV('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);
|
||||
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::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::getKV('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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user