summaryrefslogtreecommitdiff
path: root/plugins/OStatus/OStatusPlugin.php
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/OStatus/OStatusPlugin.php')
-rw-r--r--plugins/OStatus/OStatusPlugin.php110
1 files changed, 87 insertions, 23 deletions
diff --git a/plugins/OStatus/OStatusPlugin.php b/plugins/OStatus/OStatusPlugin.php
index f183bc7ae..77bc9872b 100644
--- a/plugins/OStatus/OStatusPlugin.php
+++ b/plugins/OStatus/OStatusPlugin.php
@@ -28,6 +28,15 @@ set_include_path(get_include_path() . PATH_SEPARATOR . dirname(__FILE__) . '/ext
class FeedSubException extends Exception
{
+ function __construct($msg=null)
+ {
+ $type = get_class($this);
+ if ($msg) {
+ parent::__construct("$type: $msg");
+ } else {
+ parent::__construct($type);
+ }
+ }
}
class OStatusPlugin extends Plugin
@@ -87,6 +96,8 @@ class OStatusPlugin extends Plugin
// Outgoing from our internal PuSH hub
$qm->connect('hubconf', 'HubConfQueueHandler');
+ $qm->connect('hubprep', 'HubPrepQueueHandler');
+
$qm->connect('hubout', 'HubOutQueueHandler');
// Outgoing Salmon replies (when we don't need a return value)
@@ -102,8 +113,10 @@ class OStatusPlugin extends Plugin
*/
function onStartEnqueueNotice($notice, &$transports)
{
- // put our transport first, in case there's any conflict (like OMB)
- array_unshift($transports, 'ostatus');
+ if ($notice->isLocal()) {
+ // put our transport first, in case there's any conflict (like OMB)
+ array_unshift($transports, 'ostatus');
+ }
return true;
}
@@ -154,6 +167,9 @@ class OStatusPlugin extends Plugin
// Also, we'll add in the salmon link
$salmon = common_local_url($salmonAction, array('id' => $id));
+ $feed->addLink($salmon, array('rel' => Salmon::REL_SALMON));
+
+ // XXX: these are deprecated
$feed->addLink($salmon, array('rel' => Salmon::NS_REPLIES));
$feed->addLink($salmon, array('rel' => Salmon::NS_MENTIONS));
}
@@ -232,17 +248,6 @@ class OStatusPlugin extends Plugin
}
/**
- * Check if we've got remote replies to send via Salmon.
- *
- * @fixme push webfinger lookup & sending to a background queue
- * @fixme also detect short-form name for remote subscribees where not ambiguous
- */
-
- function onEndNoticeSave($notice)
- {
- }
-
- /**
* Find any explicit remote mentions. Accepted forms:
* Webfinger: @user@example.com
* Profile link: @example.com/mublog/user
@@ -257,7 +262,7 @@ class OStatusPlugin extends Plugin
$matches = array();
// Webfinger matches: @user@example.com
- if (preg_match_all('!(?:^|\s+)@((?:\w+\.)*\w+@(?:\w+\.)*\w+(?:\w+\-\w+)*\.\w+)!',
+ if (preg_match_all('!(?:^|\s+)@((?:\w+\.)*\w+@(?:\w+\-?\w+\.)*\w+(?:\w+\-\w+)*\.\w+)!',
$text,
$wmatches,
PREG_OFFSET_CAPTURE)) {
@@ -452,6 +457,7 @@ class OStatusPlugin extends Plugin
return false;
}
}
+ return true;
}
/**
@@ -472,6 +478,24 @@ class OStatusPlugin extends Plugin
}
/**
+ * Tell the FeedSub infrastructure whether we have any active OStatus
+ * usage for the feed; if not it'll be able to garbage-collect the
+ * feed subscription.
+ *
+ * @param FeedSub $feedsub
+ * @param integer $count in/out
+ * @return mixed hook return code
+ */
+ function onFeedSubSubscriberCount($feedsub, &$count)
+ {
+ $oprofile = Ostatus_profile::staticGet('feeduri', $feedsub->uri);
+ if ($oprofile) {
+ $count += $oprofile->subscriberCount();
+ }
+ return true;
+ }
+
+ /**
* When about to subscribe to a remote user, start a server-to-server
* PuSH subscription if needed. If we can't establish that, abort.
*
@@ -540,7 +564,9 @@ class OStatusPlugin extends Plugin
$act->time = time();
$act->title = _("Follow");
- $act->content = sprintf(_("%s is now following %s."),
+ // TRANS: Success message for subscribe to user attempt through OStatus.
+ // TRANS: %1$s is the subscriber name, %2$s is the subscribed user's name.
+ $act->content = sprintf(_("%1$s is now following %2$s."),
$subscriber->getBestName(),
$other->getBestName());
@@ -588,7 +614,9 @@ class OStatusPlugin extends Plugin
$act->time = time();
$act->title = _("Unfollow");
- $act->content = sprintf(_("%s stopped following %s."),
+ // TRANS: Success message for unsubscribe from user attempt through OStatus.
+ // TRANS: %1$s is the unsubscriber's name, %2$s is the unsubscribed user's name.
+ $act->content = sprintf(_("%1$s stopped following %2$s."),
$profile->getBestName(),
$other->getBestName());
@@ -633,7 +661,9 @@ class OStatusPlugin extends Plugin
$act->time = time();
$act->title = _m("Join");
- $act->content = sprintf(_m("%s has joined group %s."),
+ // TRANS: Success message for subscribe to group attempt through OStatus.
+ // TRANS: %1$s is the member name, %2$s is the subscribed group's name.
+ $act->content = sprintf(_m("%1$s has joined group %2$s."),
$member->getBestName(),
$oprofile->getBestName());
@@ -682,7 +712,9 @@ class OStatusPlugin extends Plugin
$act->time = time();
$act->title = _m("Leave");
- $act->content = sprintf(_m("%s has left group %s."),
+ // TRANS: Success message for unsubscribe from group attempt through OStatus.
+ // TRANS: %1$s is the member name, %2$s is the unsubscribed group's name.
+ $act->content = sprintf(_m("%1$s has left group %2$s."),
$member->getBestName(),
$oprofile->getBestName());
@@ -722,7 +754,9 @@ class OStatusPlugin extends Plugin
$act->time = time();
$act->title = _("Favor");
- $act->content = sprintf(_("%s marked notice %s as a favorite."),
+ // TRANS: Success message for adding a favorite notice through OStatus.
+ // TRANS: %1$s is the favoring user's name, %2$s is URI to the favored notice.
+ $act->content = sprintf(_("%1$s marked notice %2$s as a favorite."),
$profile->getBestName(),
$notice->uri);
@@ -766,7 +800,9 @@ class OStatusPlugin extends Plugin
common_date_iso8601(time()));
$act->time = time();
$act->title = _("Disfavor");
- $act->content = sprintf(_("%s marked notice %s as no longer a favorite."),
+ // TRANS: Success message for remove a favorite notice through OStatus.
+ // TRANS: %1$s is the unfavoring user's name, %2$s is URI to the no longer favored notice.
+ $act->content = sprintf(_("%1$s marked notice %2$s as no longer a favorite."),
$profile->getBestName(),
$notice->uri);
@@ -841,7 +877,7 @@ class OStatusPlugin extends Plugin
'class' => 'entity_subscribe'));
$action->element('a', array('href' => common_local_url($target),
'class' => 'entity_remote_subscribe')
- , _m('Remote'));
+ , _m('Remote')); // @todo: i18n: Add translator hint for this text.
$action->elementEnd('p');
$action->elementEnd('div');
}
@@ -881,6 +917,8 @@ class OStatusPlugin extends Plugin
common_date_iso8601(time()));
$act->time = time();
$act->title = _m("Profile update");
+ // TRANS: Ping text for remote profile update through OStatus.
+ // TRANS: %s is user that updated their profile.
$act->content = sprintf(_m("%s has updated their profile page."),
$profile->getBestName());
@@ -910,7 +948,7 @@ class OStatusPlugin extends Plugin
array('nickname' => $profileUser->nickname));
$output->element('a', array('href' => $url,
'class' => 'entity_remote_subscribe'),
- _m('Subscribe'));
+ _m('Subscribe')); // @todo: i18n: Add context.
$output->elementEnd('li');
}
}
@@ -926,7 +964,7 @@ class OStatusPlugin extends Plugin
'homepage' => 'http://status.net/wiki/Plugin:OStatus',
'rawdescription' =>
_m('Follow people across social networks that implement '.
- '<a href="http://ostatus.org/">OStatus</a>.'));
+ '<a href="http://ostatus.org/">OStatus</a>.')); // @todo i18n: Add translator hint.
return true;
}
@@ -948,4 +986,30 @@ class OStatusPlugin extends Plugin
}
return false;
}
+
+ public function onStartProfileGetAtomFeed($profile, &$feed)
+ {
+ $oprofile = Ostatus_profile::staticGet('profile_id', $profile->id);
+
+ if (empty($oprofile)) {
+ return true;
+ }
+
+ $feed = $oprofile->feeduri;
+ return false;
+ }
+
+ function onStartGetProfileFromURI($uri, &$profile) {
+
+ // XXX: do discovery here instead (OStatus_profile::ensureProfileURI($uri))
+
+ $oprofile = Ostatus_profile::staticGet('uri', $uri);
+
+ if (!empty($oprofile) && !$oprofile->isGroup()) {
+ $profile = $oprofile->localProfile();
+ return false;
+ }
+
+ return true;
+ }
}