diff --git a/plugins/OStatus/OStatusPlugin.php b/plugins/OStatus/OStatusPlugin.php index 8cdc9c343a..bc08a62eff 100644 --- a/plugins/OStatus/OStatusPlugin.php +++ b/plugins/OStatus/OStatusPlugin.php @@ -104,6 +104,9 @@ class OStatusPlugin extends Plugin // Incoming from a foreign PuSH hub $qm->connect('pushin', 'PushInQueueHandler'); + + // Re-subscribe feeds that need renewal + $qm->connect('pushrenew', 'PushRenewQueueHandler'); return true; } @@ -1361,9 +1364,10 @@ class OStatusPlugin extends Plugin return; } + $qm = QueueManager::get(); while ($sub->fetch()) { - common_log(LOG_INFO, "Renewing feed subscription\n\tExp.: {$sub->sub_end}\n\tFeed: {$sub->uri}\n\tHub: {$sub->huburi}"); - $sub->renew(); + $item = array('feedsub_id' => $sub->id); + $qm->enqueue($item, 'pushrenew'); } } } diff --git a/plugins/OStatus/lib/pushrenewqueuehandler.php b/plugins/OStatus/lib/pushrenewqueuehandler.php new file mode 100644 index 0000000000..d79cbe503f --- /dev/null +++ b/plugins/OStatus/lib/pushrenewqueuehandler.php @@ -0,0 +1,49 @@ +. + */ + +if (!defined('STATUSNET')) { + exit(1); +} + +/** + * Renew an expiring feedsub + * @package FeedSub + * @author Stephen Paul Weber + */ +class PushRenewQueueHandler extends QueueHandler +{ + function transport() + { + return 'pushrenew'; + } + + function handle($data) + { + $feedsub_id = $data['feedsub_id']; + $feedsub = FeedSub::getKV('id', $feedsub_id); + if ($feedsub instanceof FeedSub) { + try { + common_log(LOG_INFO, "Renewing feed subscription\n\tExp.: {$feedsub->sub_end}\n\tFeed: {$feedsub->uri}\n\tHub: {$feedsub->huburi}"); + $feedsub->renew(); + } catch(Exception $e) { + common_log(LOG_ERR, "Exception during PuSH renew processing for $feedsub->uri: " . $e->getMessage()); + } + } else { + common_log(LOG_ERR, "Discarding renew for unknown feed subscription id $feedsub_id"); + } + return true; + } +}