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)
|
function onStartEnqueueNotice($notice, &$transports)
|
||||||
{
|
{
|
||||||
if ($notice->isLocal()) {
|
if ($notice->inScope(null)) {
|
||||||
if ($notice->inScope(null)) {
|
// put our transport first, in case there's any conflict (like OMB)
|
||||||
// put our transport first, in case there's any conflict (like OMB)
|
array_unshift($transports, 'ostatus');
|
||||||
array_unshift($transports, 'ostatus');
|
$this->log(LOG_INFO, "Notice {$notice->id} queued for OStatus processing");
|
||||||
$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}");
|
|
||||||
}
|
|
||||||
} else {
|
} 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;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -60,40 +60,53 @@ class OStatusQueueHandler extends QueueHandler
|
|||||||
return true;
|
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) {
|
foreach ($notice->getGroups() as $group) {
|
||||||
$oprofile = Ostatus_profile::getKV('group_id', $group->id);
|
$oprofile = Ostatus_profile::getKV('group_id', $group->id);
|
||||||
if ($oprofile) {
|
if ($oprofile) {
|
||||||
$this->pingReply($oprofile);
|
// remote group
|
||||||
|
if ($notice->isLocal()) {
|
||||||
|
$this->pingReply($oprofile);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
|
// local group
|
||||||
$this->pushGroup($group->id);
|
$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)) {
|
if ($notice->isLocal()) {
|
||||||
$replyTo = Notice::getKV('id', $this->notice->reply_to);
|
// Notices generated on other sites will have already
|
||||||
if (!empty($replyTo)) {
|
// pinged their reply-targets.
|
||||||
foreach($replyTo->getReplies() as $profile_id) {
|
|
||||||
$oprofile = Ostatus_profile::getKV('profile_id', $profile_id);
|
foreach ($notice->getReplies() as $profile_id) {
|
||||||
if ($oprofile) {
|
$oprofile = Ostatus_profile::getKV('profile_id', $profile_id);
|
||||||
$this->pingReply($oprofile);
|
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) {
|
foreach ($notice->getProfileTags() as $ptag) {
|
||||||
$oprofile = Ostatus_profile::getKV('peopletag_id', $ptag->id);
|
$oprofile = Ostatus_profile::getKV('peopletag_id', $ptag->id);
|
||||||
if (!$oprofile) {
|
if (!$oprofile) {
|
||||||
$this->pushPeopletag($ptag);
|
$this->pushPeopletag($ptag);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user