- break OMB profile update pings to a background queue

- add event hooks to profile update pings
- send Salmon pings with custom update-profile event to OStatus subscribees and groups (subscribers will see it on your next post)
- fix OStatus queues with overlong transport names, should work on DB queues now
- Ostatus_profile::notifyActivity() and ::notifyDeferred() now can take XML, Notice, or Activity for convenience
This commit is contained in:
Brion Vibber
2010-02-24 20:36:36 +00:00
parent 07214f1370
commit c36bdc1ba5
12 changed files with 170 additions and 41 deletions

View File

@@ -431,21 +431,57 @@ class Ostatus_profile extends Memcached_DataObject
return false;
}
public function notifyActivity($activity)
/**
* Send a Salmon notification ping immediately, and confirm that we got
* an acceptable response from the remote site.
*
* @param mixed $entry XML string, Notice, or Activity
* @return boolean success
*/
public function notifyActivity($entry)
{
if ($this->salmonuri) {
$xml = '<?xml version="1.0" encoding="UTF-8" ?' . '>' .
$activity->asString(true);
$salmon = new Salmon(); // ?
return $salmon->post($this->salmonuri, $xml);
$salmon = new Salmon();
return $salmon->post($this->salmonuri, $this->notifyPrepXml($entry));
}
return false;
}
/**
* Queue a Salmon notification for later. If queues are disabled we'll
* send immediately but won't get the return value.
*
* @param mixed $entry XML string, Notice, or Activity
* @return boolean success
*/
public function notifyDeferred($entry)
{
if ($this->salmonuri) {
$data = array('salmonuri' => $this->salmonuri,
'entry' => $this->notifyPrepXml($entry));
$qm = QueueManager::get();
return $qm->enqueue($data, 'salmon');
}
return false;
}
protected function notifyPrepXml($entry)
{
$preamble = '<?xml version="1.0" encoding="UTF-8" ?' . '>';
if (is_string($entry)) {
return $entry;
} else if ($entry instanceof Activity) {
return $preamble . $entry->asString(true);
} else if ($entry instanceof Notice) {
return $preamble . $entry->asAtomEntry(true, true);
} else {
throw new ServerException("Invalid type passed to Ostatus_profile::notify; must be XML string or Activity entry");
}
}
function getBestName()
{
if ($this->isGroup()) {