We are no longer offering accounts on this server. Consider https://gitlab.freedesktop.org/ as a place to host projects.

Commit 44f7ad61 authored by Joshua Judson Rosen's avatar Joshua Judson Rosen Committed by mattl

Correctly distribute notices from remote posters through local groups to...

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
parent 8e53eb2b
......@@ -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 ($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);
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);
}
}
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment