OStatus queue handler uses Notice->getAttentionProfiles()
and lots more debugging for LOG_DEBUG
This commit is contained in:
parent
e6f2676c5c
commit
4e0ed61f7c
@ -376,6 +376,7 @@ class Ostatus_profile extends Managed_DataObject
|
|||||||
public function notifyDeferred($entry, $actor)
|
public function notifyDeferred($entry, $actor)
|
||||||
{
|
{
|
||||||
if ($this->salmonuri) {
|
if ($this->salmonuri) {
|
||||||
|
common_debug("OSTATUS: user {$actor->getNickname()} ({$actor->getID()}) wants to ping {$this->localProfile()->getNickname()} on {$this->salmonuri}");
|
||||||
$data = array('salmonuri' => $this->salmonuri,
|
$data = array('salmonuri' => $this->salmonuri,
|
||||||
'entry' => $this->notifyPrepXml($entry),
|
'entry' => $this->notifyPrepXml($entry),
|
||||||
'actor' => $actor->getID(),
|
'actor' => $actor->getID(),
|
||||||
|
@ -66,40 +66,57 @@ class OStatusQueueHandler extends QueueHandler
|
|||||||
$this->pushUser();
|
$this->pushUser();
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($notice->getGroups() as $group) {
|
foreach ($notice->getAttentionProfiles() as $target) {
|
||||||
$oprofile = Ostatus_profile::getKV('group_id', $group->id);
|
common_debug("OSTATUS [{$this->notice->getID()}]: Attention target profile {$target->getNickname()} ({$target->getID()})");
|
||||||
if ($oprofile) {
|
if ($target->isGroup()) {
|
||||||
// remote group
|
common_debug("OSTATUS [{$this->notice->getID()}]: {$target->getID()} is a group");
|
||||||
if ($notice->isLocal()) {
|
$oprofile = Ostatus_profile::getKV('group_id', $target->getGroup()->getID());
|
||||||
|
if (!$oprofile instanceof Ostatus_profile) {
|
||||||
|
// we don't save profiles like this yet, but in the future
|
||||||
|
$oprofile = Ostatus_profile::getKV('profile_id', $target->getID());
|
||||||
|
}
|
||||||
|
if ($oprofile instanceof Ostatus_profile) {
|
||||||
|
// remote group
|
||||||
|
if ($notice->isLocal()) {
|
||||||
|
common_debug("OSTATUS [{$this->notice->getID()}]: notice is local and remote group with profile ID {$target->getID()} gets a ping");
|
||||||
|
$this->pingReply($oprofile);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
common_debug("OSTATUS [{$this->notice->getID()}]: local group with profile id {$target->getID()} gets pushed out");
|
||||||
|
// local group
|
||||||
|
$this->pushGroup($target->getGroup());
|
||||||
|
}
|
||||||
|
} elseif ($notice->isLocal()) {
|
||||||
|
// Notices generated on other sites will have already
|
||||||
|
// pinged their reply-targets, so only do these things
|
||||||
|
// if the target is not a group and the notice is locally generated
|
||||||
|
|
||||||
|
$oprofile = Ostatus_profile::getKV('profile_id', $target->getID());
|
||||||
|
if ($oprofile instanceof Ostatus_profile) {
|
||||||
|
common_debug("OSTATUS [{$this->notice->getID()}]: Notice is local and {$target->getID()} is remote profile, getting pingReply");
|
||||||
$this->pingReply($oprofile);
|
$this->pingReply($oprofile);
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
// local group
|
|
||||||
$this->pushGroup($group->id);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($notice->isLocal()) {
|
if ($notice->isLocal()) {
|
||||||
// Notices generated on other sites will have already
|
try {
|
||||||
// pinged their reply-targets.
|
$parent = $this->notice->getParent();
|
||||||
|
foreach($parent->getAttentionProfiles() as $related) {
|
||||||
foreach ($notice->getReplies() as $profile_id) {
|
if ($related->isGroup()) {
|
||||||
$oprofile = Ostatus_profile::getKV('profile_id', $profile_id);
|
// don't ping groups in parent notices since we might not be a member of them,
|
||||||
if ($oprofile) {
|
// though it could be useful if we study this and use it correctly
|
||||||
$this->pingReply($oprofile);
|
continue;
|
||||||
}
|
}
|
||||||
}
|
common_debug("OSTATUS [{$this->notice->getID()}]: parent notice {$parent->getID()} has related profile id=={$related->getID()}");
|
||||||
|
// FIXME: don't ping twice in case someone is in both notice attention spans!
|
||||||
if (!empty($this->notice->reply_to)) {
|
$oprofile = Ostatus_profile::getKV('profile_id', $related->getID());
|
||||||
$replyTo = Notice::getKV('id', $this->notice->reply_to);
|
if ($oprofile instanceof Ostatus_profile) {
|
||||||
if (!empty($replyTo)) {
|
$this->pingReply($oprofile);
|
||||||
foreach($replyTo->getReplies() as $profile_id) {
|
|
||||||
$oprofile = Ostatus_profile::getKV('profile_id', $profile_id);
|
|
||||||
if ($oprofile) {
|
|
||||||
$this->pingReply($oprofile);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} catch (NoParentNoticeException $e) {
|
||||||
|
// nothing to do then
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($notice->getProfileTags() as $ptag) {
|
foreach ($notice->getProfileTags() as $ptag) {
|
||||||
@ -116,6 +133,7 @@ class OStatusQueueHandler extends QueueHandler
|
|||||||
function pushUser()
|
function pushUser()
|
||||||
{
|
{
|
||||||
if ($this->user) {
|
if ($this->user) {
|
||||||
|
common_debug("OSTATUS [{$this->notice->getID()}]: pushing feed for local user {$this->user->getID()}");
|
||||||
// For local posts, ping the PuSH hub to update their feed.
|
// For local posts, ping the PuSH hub to update their feed.
|
||||||
// http://identi.ca/api/statuses/user_timeline/1.atom
|
// http://identi.ca/api/statuses/user_timeline/1.atom
|
||||||
$feed = common_local_url('ApiTimelineUser',
|
$feed = common_local_url('ApiTimelineUser',
|
||||||
@ -125,18 +143,20 @@ class OStatusQueueHandler extends QueueHandler
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function pushGroup($group_id)
|
function pushGroup(User_group $group)
|
||||||
{
|
{
|
||||||
|
common_debug("OSTATUS [{$this->notice->getID()}]: pushing group '{$group->getNickname()}' profile_id={$group->profile_id}");
|
||||||
// For a local group, ping the PuSH hub to update its feed.
|
// For a local group, ping the PuSH hub to update its feed.
|
||||||
// Updates may come from either a local or a remote user.
|
// Updates may come from either a local or a remote user.
|
||||||
$feed = common_local_url('ApiTimelineGroup',
|
$feed = common_local_url('ApiTimelineGroup',
|
||||||
array('id' => $group_id,
|
array('id' => $group->getID(),
|
||||||
'format' => 'atom'));
|
'format' => 'atom'));
|
||||||
$this->pushFeed($feed, array($this, 'groupFeedForNotice'), $group_id);
|
$this->pushFeed($feed, array($this, 'groupFeedForNotice'), $group->getID());
|
||||||
}
|
}
|
||||||
|
|
||||||
function pushPeopletag($ptag)
|
function pushPeopletag($ptag)
|
||||||
{
|
{
|
||||||
|
common_debug("OSTATUS [{$this->notice->getID()}]: pushing peopletag '{$ptag->id}'");
|
||||||
// For a local people tag, ping the PuSH hub to update its feed.
|
// For a local people tag, ping the PuSH hub to update its feed.
|
||||||
// Updates may come from either a local or a remote user.
|
// Updates may come from either a local or a remote user.
|
||||||
$feed = common_local_url('ApiTimelineList',
|
$feed = common_local_url('ApiTimelineList',
|
||||||
@ -146,9 +166,10 @@ class OStatusQueueHandler extends QueueHandler
|
|||||||
$this->pushFeed($feed, array($this, 'peopletagFeedForNotice'), $ptag);
|
$this->pushFeed($feed, array($this, 'peopletagFeedForNotice'), $ptag);
|
||||||
}
|
}
|
||||||
|
|
||||||
function pingReply($oprofile)
|
function pingReply(Ostatus_profile $oprofile)
|
||||||
{
|
{
|
||||||
if ($this->user) {
|
if ($this->user) {
|
||||||
|
common_debug("OSTATUS [{$this->notice->getID()}]: pinging reply to {$oprofile->localProfile()->getNickname()} for local user '{$this->user->getID()}'");
|
||||||
// For local posts, send a Salmon ping to the mentioned
|
// For local posts, send a Salmon ping to the mentioned
|
||||||
// remote user or group.
|
// remote user or group.
|
||||||
// @fixme as an optimization we can skip this if the
|
// @fixme as an optimization we can skip this if the
|
||||||
|
Loading…
Reference in New Issue
Block a user