summaryrefslogtreecommitdiff
path: root/plugins/OStatus/classes/FeedSub.php
diff options
context:
space:
mode:
authorBrion Vibber <brion@status.net>2010-08-06 10:56:18 -0700
committerBrion Vibber <brion@status.net>2010-08-06 11:49:52 -0700
commit7e55fc00447923b40b2ffc87329fd95347d776f5 (patch)
treec0ec54c201306fc1ee781676c9080ec0b6815dbb /plugins/OStatus/classes/FeedSub.php
parentebd2fc2f7cb799cc190b2d4a77d8d0057a8854c0 (diff)
OStatus/FeedSub: tweaked PuSH feed garbage collection so other plugins can declare usage of a low-level feed or an OStatus profile besides profile subscriptions & group memberships.
SubMirror: redid add-mirror frontend to accept a feed URL, then pass that on to OStatus, instead of pulling from your subscriptions. Profile: tweaked subscriberCount() so it doesn't subtract 1 for foreign profiles who aren't subscribed to themselves; instead excludes the self-subscription in the count query. Memcached_DataObject: tweak to avoid extra error spew in the DB error raising Work in progress: tweaking feedsub garbage collection so we can count other uses
Diffstat (limited to 'plugins/OStatus/classes/FeedSub.php')
-rw-r--r--plugins/OStatus/classes/FeedSub.php30
1 files changed, 30 insertions, 0 deletions
diff --git a/plugins/OStatus/classes/FeedSub.php b/plugins/OStatus/classes/FeedSub.php
index b10509dae..9cd35e29c 100644
--- a/plugins/OStatus/classes/FeedSub.php
+++ b/plugins/OStatus/classes/FeedSub.php
@@ -255,6 +255,9 @@ class FeedSub extends Memcached_DataObject
/**
* Send a PuSH unsubscription request to the hub for this feed.
* The hub will later send us a confirmation POST to /main/push/callback.
+ * Warning: this will cancel the subscription even if someone else in
+ * the system is using it. Most callers will want garbageCollect() instead,
+ * which confirms there's no uses left.
*
* @return bool true on success, false on failure
* @throws ServerException if feed state is not valid
@@ -275,6 +278,33 @@ class FeedSub extends Memcached_DataObject
return $this->doSubscribe('unsubscribe');
}
+ /**
+ * Check if there are any active local uses of this feed, and if not then
+ * make sure it's inactive, unsubscribing if necessary.
+ *
+ * @return boolean true if the subscription is now inactive, false if still active.
+ */
+ public function garbageCollect()
+ {
+ if ($this->sub_state == '' || $this->sub_state == 'inactive') {
+ // No active PuSH subscription, we can just leave it be.
+ return true;
+ } else {
+ // PuSH subscription is either active or in an indeterminate state.
+ // Check if we're out of subscribers, and if so send an unsubscribe.
+ $count = 0;
+ Event::handle('FeedSubSubscriberCount', array($this, &$count));
+
+ if ($count) {
+ common_log(LOG_INFO, __METHOD__ . ': ok, ' . $count . ' user(s) left for ' . $this->uri);
+ return false;
+ } else {
+ common_log(LOG_INFO, __METHOD__ . ': unsubscribing, no users left for ' . $this->uri);
+ return $this->unsubscribe();
+ }
+ }
+ }
+
protected function doSubscribe($mode)
{
$orig = clone($this);