diff options
author | Evan Prodromou <evan@status.net> | 2010-08-03 16:04:54 -0700 |
---|---|---|
committer | Evan Prodromou <evan@status.net> | 2010-08-03 16:04:54 -0700 |
commit | 004e42e3e0606f0f9e5c8b6cd4512e5d870cd56e (patch) | |
tree | ab895f7609c8afeeadf3439c860b69d0cffcbb5e /plugins/OStatus | |
parent | d2234580357349a6887a2321e69d11de7bb29106 (diff) | |
parent | fdd9aa58e3caf87096e1c1dcfa8b2f286b04e4b1 (diff) |
Merge remote branch 'gitorious/1.0.x' into 1.0.x
Diffstat (limited to 'plugins/OStatus')
-rw-r--r-- | plugins/OStatus/OStatusPlugin.php | 11 | ||||
-rw-r--r-- | plugins/OStatus/actions/ostatussub.php | 14 | ||||
-rw-r--r-- | plugins/OStatus/classes/HubSub.php | 51 | ||||
-rw-r--r-- | plugins/OStatus/classes/Ostatus_profile.php | 28 | ||||
-rw-r--r-- | plugins/OStatus/lib/discoveryhints.php | 3 | ||||
-rw-r--r-- | plugins/OStatus/lib/feeddiscovery.php | 2 | ||||
-rw-r--r-- | plugins/OStatus/lib/ostatusqueuehandler.php | 31 | ||||
-rw-r--r-- | plugins/OStatus/locale/OStatus.pot | 319 | ||||
-rw-r--r-- | plugins/OStatus/locale/fr/LC_MESSAGES/OStatus.po | 109 | ||||
-rw-r--r-- | plugins/OStatus/scripts/resub-feed.php | 74 | ||||
-rw-r--r-- | plugins/OStatus/scripts/update-profile.php | 147 |
11 files changed, 516 insertions, 273 deletions
diff --git a/plugins/OStatus/OStatusPlugin.php b/plugins/OStatus/OStatusPlugin.php index f183bc7ae..c61e2cc5f 100644 --- a/plugins/OStatus/OStatusPlugin.php +++ b/plugins/OStatus/OStatusPlugin.php @@ -87,6 +87,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 +104,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; } @@ -257,7 +261,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 +456,7 @@ class OStatusPlugin extends Plugin return false; } } + return true; } /** diff --git a/plugins/OStatus/actions/ostatussub.php b/plugins/OStatus/actions/ostatussub.php index 994af6e95..28714514f 100644 --- a/plugins/OStatus/actions/ostatussub.php +++ b/plugins/OStatus/actions/ostatussub.php @@ -446,4 +446,18 @@ class OStatusSubAction extends Action { return common_local_url('ostatussub'); } + + /** + * Disable the send-notice form at the top of the page. + * This is really just a hack for the broken CSS in the Cloudy theme, + * I think; copying from other non-notice-navigation pages that do this + * as well. There will be plenty of others also broken. + * + * @fixme fix the cloudy theme + * @fixme do this in a more general way + */ + function showNoticeForm() { + // nop + } + } diff --git a/plugins/OStatus/classes/HubSub.php b/plugins/OStatus/classes/HubSub.php index cdace3c1f..7db528a4e 100644 --- a/plugins/OStatus/classes/HubSub.php +++ b/plugins/OStatus/classes/HubSub.php @@ -260,6 +260,37 @@ class HubSub extends Memcached_DataObject $retries = intval(common_config('ostatus', 'hub_retries')); } + if (common_config('ostatus', 'local_push_bypass')) { + // If target is a local site, bypass the web server and drop the + // item directly into the target's input queue. + $url = parse_url($this->callback); + $wildcard = common_config('ostatus', 'local_wildcard'); + $site = Status_network::getFromHostname($url['host'], $wildcard); + + if ($site) { + if ($this->secret) { + $hmac = 'sha1=' . hash_hmac('sha1', $atom, $this->secret); + } else { + $hmac = ''; + } + + // Hack: at the moment we stick the subscription ID in the callback + // URL so we don't have to look inside the Atom to route the subscription. + // For now this means we need to extract that from the target URL + // so we can include it in the data. + $parts = explode('/', $url['path']); + $subId = intval(array_pop($parts)); + + $data = array('feedsub_id' => $subId, + 'post' => $atom, + 'hmac' => $hmac); + common_log(LOG_DEBUG, "Cross-site PuSH bypass enqueueing straight to $site->nickname feed $subId"); + $qm = QueueManager::get(); + $qm->enqueue($data, 'pushin', $site->nickname); + return; + } + } + // We dare not clone() as when the clone is discarded it'll // destroy the result data for the parent query. // @fixme use clone() again when it's safe to copy an @@ -274,6 +305,26 @@ class HubSub extends Memcached_DataObject } /** + * Queue up a large batch of pushes to multiple subscribers + * for this same topic update. + * + * If queues are disabled, this will run immediately. + * + * @param string $atom well-formed Atom feed + * @param array $pushCallbacks list of callback URLs + */ + function bulkDistribute($atom, $pushCallbacks) + { + $data = array('atom' => $atom, + 'topic' => $this->topic, + 'pushCallbacks' => $pushCallbacks); + common_log(LOG_INFO, "Queuing PuSH batch: $this->topic to " . + count($pushCallbacks) . " sites"); + $qm = QueueManager::get(); + $qm->enqueue($data, 'hubprep'); + } + + /** * Send a 'fat ping' to the subscriber's callback endpoint * containing the given Atom feed chunk. * diff --git a/plugins/OStatus/classes/Ostatus_profile.php b/plugins/OStatus/classes/Ostatus_profile.php index e3b3daa2c..5d3f37cd0 100644 --- a/plugins/OStatus/classes/Ostatus_profile.php +++ b/plugins/OStatus/classes/Ostatus_profile.php @@ -1001,7 +1001,7 @@ class Ostatus_profile extends Memcached_DataObject return; } if (!common_valid_http_url($url)) { - throw new ServerException(_m("Invalid avatar URL %s"), $url); + throw new ServerException(sprintf(_m("Invalid avatar URL %s"), $url)); } if ($this->isGroup()) { @@ -1303,15 +1303,23 @@ class Ostatus_profile extends Memcached_DataObject $ok = $oprofile->insert(); - if ($ok) { - $avatar = self::getActivityObjectAvatar($object, $hints); - if ($avatar) { + if (!$ok) { + throw new ServerException("Can't save OStatus profile"); + } + + $avatar = self::getActivityObjectAvatar($object, $hints); + + if ($avatar) { + try { $oprofile->updateAvatar($avatar); + } catch (Exception $ex) { + // Profile is saved, but Avatar is messed up. We're + // just going to continue. + common_log(LOG_WARNING, "Exception saving OStatus profile avatar: ". $ex->getMessage()); } - return $oprofile; - } else { - throw new ServerException("Can't save OStatus profile"); } + + return $oprofile; } /** @@ -1330,7 +1338,11 @@ class Ostatus_profile extends Memcached_DataObject } $avatar = self::getActivityObjectAvatar($object, $hints); if ($avatar) { - $this->updateAvatar($avatar); + try { + $this->updateAvatar($avatar); + } catch (Exception $ex) { + common_log(LOG_WARNING, "Exception saving OStatus profile avatar: " . $ex->getMessage()); + } } } diff --git a/plugins/OStatus/lib/discoveryhints.php b/plugins/OStatus/lib/discoveryhints.php index 80cfbbf15..34c9be277 100644 --- a/plugins/OStatus/lib/discoveryhints.php +++ b/plugins/OStatus/lib/discoveryhints.php @@ -30,6 +30,7 @@ class DiscoveryHints { case Discovery::PROFILEPAGE: $hints['profileurl'] = $link['href']; break; + case Salmon::NS_MENTIONS: case Salmon::NS_REPLIES: $hints['salmon'] = $link['href']; break; @@ -83,7 +84,7 @@ class DiscoveryHints { $hints['fullname'] = implode(' ', $hcard['n']); } - if (array_key_exists('photo', $hcard)) { + if (array_key_exists('photo', $hcard) && count($hcard['photo'])) { $hints['avatar'] = $hcard['photo'][0]; } diff --git a/plugins/OStatus/lib/feeddiscovery.php b/plugins/OStatus/lib/feeddiscovery.php index 4809f9d35..4ac243832 100644 --- a/plugins/OStatus/lib/feeddiscovery.php +++ b/plugins/OStatus/lib/feeddiscovery.php @@ -104,7 +104,7 @@ class FeedDiscovery $response = $client->get($url); } catch (HTTP_Request2_Exception $e) { common_log(LOG_ERR, __METHOD__ . " Failure for $url - " . $e->getMessage()); - throw new FeedSubBadURLException($e); + throw new FeedSubBadURLException($e->getMessage()); } if ($htmlOk) { diff --git a/plugins/OStatus/lib/ostatusqueuehandler.php b/plugins/OStatus/lib/ostatusqueuehandler.php index d1e58f1d6..8905d2e21 100644 --- a/plugins/OStatus/lib/ostatusqueuehandler.php +++ b/plugins/OStatus/lib/ostatusqueuehandler.php @@ -25,6 +25,18 @@ */ class OStatusQueueHandler extends QueueHandler { + // If we have more than this many subscribing sites on a single feed, + // break up the PuSH distribution into smaller batches which will be + // rolled into the queue progressively. This reduces disruption to + // other, shorter activities being enqueued while we work. + const MAX_UNBATCHED = 50; + + // Each batch (a 'hubprep' entry) will have this many items. + // Selected to provide a balance between queue packet size + // and number of batches that will end up getting processed. + // For 20,000 target sites, 1000 should work acceptably. + const BATCH_SIZE = 1000; + function transport() { return 'ostatus'; @@ -147,14 +159,31 @@ class OStatusQueueHandler extends QueueHandler /** * Queue up direct feed update pushes to subscribers on our internal hub. + * If there are a large number of subscriber sites, intermediate bulk + * distribution triggers may be queued. + * * @param string $atom update feed, containing only new/changed items * @param HubSub $sub open query of subscribers */ function pushFeedInternal($atom, $sub) { common_log(LOG_INFO, "Preparing $sub->N PuSH distribution(s) for $sub->topic"); + $n = 0; + $batch = array(); while ($sub->fetch()) { - $sub->distribute($atom); + $n++; + if ($n < self::MAX_UNBATCHED) { + $sub->distribute($atom); + } else { + $batch[] = $sub->callback; + if (count($batch) >= self::BATCH_SIZE) { + $sub->bulkDistribute($atom, $batch); + $batch = array(); + } + } + } + if (count($batch) >= 0) { + $sub->bulkDistribute($atom, $batch); } } diff --git a/plugins/OStatus/locale/OStatus.pot b/plugins/OStatus/locale/OStatus.pot index 7e33a0eed..97d593ead 100644 --- a/plugins/OStatus/locale/OStatus.pot +++ b/plugins/OStatus/locale/OStatus.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-03-01 14:58-0800\n" +"POT-Creation-Date: 2010-04-29 23:39+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -16,297 +16,316 @@ msgstr "" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: actions/groupsalmon.php:51 -msgid "Can't accept remote posts for a remote group." -msgstr "" - -#: actions/groupsalmon.php:123 -msgid "Can't read profile to set up group membership." +#: OStatusPlugin.php:210 OStatusPlugin.php:913 actions/ostatusinit.php:99 +msgid "Subscribe" msgstr "" -#: actions/groupsalmon.php:126 actions/groupsalmon.php:169 -msgid "Groups can't join groups." +#: OStatusPlugin.php:228 OStatusPlugin.php:635 actions/ostatussub.php:105 +#: actions/ostatusinit.php:96 +msgid "Join" msgstr "" -#: actions/groupsalmon.php:153 +#: OStatusPlugin.php:451 #, php-format -msgid "Could not join remote user %1$s to group %2$s." +msgid "Sent from %s via OStatus" msgstr "" -#: actions/groupsalmon.php:166 -msgid "Can't read profile to cancel group membership." +#: OStatusPlugin.php:503 +msgid "Could not set up remote subscription." msgstr "" -#: actions/groupsalmon.php:182 -#, php-format -msgid "Could not remove remote user %1$s from group %2$s." +#: OStatusPlugin.php:619 +msgid "Could not set up remote group membership." msgstr "" -#: actions/ostatusinit.php:40 -msgid "You can use the local subscription!" +#: OStatusPlugin.php:636 +#, php-format +msgid "%s has joined group %s." msgstr "" -#: actions/ostatusinit.php:61 -msgid "There was a problem with your session token. Try again, please." +#: OStatusPlugin.php:644 +msgid "Failed joining remote group." msgstr "" -#: actions/ostatusinit.php:79 actions/ostatussub.php:439 -msgid "Subscribe to user" +#: OStatusPlugin.php:684 +msgid "Leave" msgstr "" -#: actions/ostatusinit.php:97 +#: OStatusPlugin.php:685 #, php-format -msgid "Subscribe to %s" +msgid "%s has left group %s." msgstr "" -#: actions/ostatusinit.php:102 -msgid "User nickname" +#: OStatusPlugin.php:844 +msgid "Remote" msgstr "" -#: actions/ostatusinit.php:103 -msgid "Nickname of the user you want to follow" +#: OStatusPlugin.php:883 +msgid "Profile update" msgstr "" -#: actions/ostatusinit.php:106 -msgid "Profile Account" +#: OStatusPlugin.php:884 +#, php-format +msgid "%s has updated their profile page." msgstr "" -#: actions/ostatusinit.php:107 -msgid "Your account id (i.e. user@identi.ca)" +#: OStatusPlugin.php:928 +msgid "" +"Follow people across social networks that implement <a href=\"http://ostatus." +"org/\">OStatus</a>." msgstr "" -#: actions/ostatusinit.php:110 actions/ostatussub.php:115 -#: OStatusPlugin.php:205 -msgid "Subscribe" +#: classes/Ostatus_profile.php:566 +msgid "Show more" msgstr "" -#: actions/ostatusinit.php:128 -msgid "Must provide a remote profile." +#: classes/Ostatus_profile.php:1004 +#, php-format +msgid "Invalid avatar URL %s" msgstr "" -#: actions/ostatusinit.php:138 -msgid "Couldn't look up OStatus account profile." +#: classes/Ostatus_profile.php:1014 +#, php-format +msgid "Tried to update avatar for unsaved remote profile %s" msgstr "" -#: actions/ostatusinit.php:153 -msgid "Couldn't confirm remote profile address." +#: classes/Ostatus_profile.php:1022 +#, php-format +msgid "Unable to fetch avatar from %s" msgstr "" -#: actions/ostatusinit.php:171 -msgid "OStatus Connect" +#: lib/salmonaction.php:41 +msgid "This method requires a POST." msgstr "" -#: actions/ostatussub.php:68 -msgid "Address or profile URL" +#: lib/salmonaction.php:45 +msgid "Salmon requires application/magic-envelope+xml" msgstr "" -#: actions/ostatussub.php:70 -msgid "Enter the profile URL of a PubSubHubbub-enabled feed" +#: lib/salmonaction.php:55 +msgid "Salmon signature verification failed." msgstr "" -#: actions/ostatussub.php:74 -msgid "Continue" +#: lib/salmonaction.php:67 +msgid "Salmon post must be an Atom entry." msgstr "" -#: actions/ostatussub.php:112 OStatusPlugin.php:503 -msgid "Join" +#: lib/salmonaction.php:115 +msgid "Unrecognized activity type." msgstr "" -#: actions/ostatussub.php:113 -msgid "Join this group" +#: lib/salmonaction.php:123 +msgid "This target doesn't understand posts." msgstr "" -#: actions/ostatussub.php:116 -msgid "Subscribe to this user" +#: lib/salmonaction.php:128 +msgid "This target doesn't understand follows." msgstr "" -#: actions/ostatussub.php:137 -msgid "You are already subscribed to this user." +#: lib/salmonaction.php:133 +msgid "This target doesn't understand unfollows." msgstr "" -#: actions/ostatussub.php:165 -msgid "You are already a member of this group." +#: lib/salmonaction.php:138 +msgid "This target doesn't understand favorites." msgstr "" -#: actions/ostatussub.php:286 -msgid "Empty remote profile URL!" +#: lib/salmonaction.php:143 +msgid "This target doesn't understand unfavorites." msgstr "" -#: actions/ostatussub.php:297 -msgid "Invalid address format." +#: lib/salmonaction.php:148 +msgid "This target doesn't understand share events." msgstr "" -#: actions/ostatussub.php:302 -msgid "Invalid URL or could not reach server." +#: lib/salmonaction.php:153 +msgid "This target doesn't understand joins." msgstr "" -#: actions/ostatussub.php:304 -msgid "Cannot read feed; server returned error." +#: lib/salmonaction.php:158 +msgid "This target doesn't understand leave events." msgstr "" -#: actions/ostatussub.php:306 -msgid "Cannot read feed; server returned an empty page." +#: tests/gettext-speedtest.php:57 +msgid "Feeds" msgstr "" -#: actions/ostatussub.php:308 -msgid "Bad HTML, could not find feed link." +#: actions/ostatusgroup.php:75 +msgid "Join group" msgstr "" -#: actions/ostatussub.php:310 -msgid "Could not find a feed linked from this URL." +#: actions/ostatusgroup.php:77 +msgid "OStatus group's address, like http://example.net/group/nickname" msgstr "" -#: actions/ostatussub.php:312 -msgid "Not a recognized feed type." +#: actions/ostatusgroup.php:81 actions/ostatussub.php:71 +msgid "Continue" msgstr "" -#: actions/ostatussub.php:315 -#, php-format -msgid "Bad feed URL: %s %s" +#: actions/ostatusgroup.php:100 +msgid "You are already a member of this group." msgstr "" #. TRANS: OStatus remote group subscription dialog error. -#: actions/ostatussub.php:336 +#: actions/ostatusgroup.php:135 msgid "Already a member!" msgstr "" #. TRANS: OStatus remote group subscription dialog error. -#: actions/ostatussub.php:346 +#: actions/ostatusgroup.php:146 msgid "Remote group join failed!" msgstr "" #. TRANS: OStatus remote group subscription dialog error. -#: actions/ostatussub.php:350 +#: actions/ostatusgroup.php:150 msgid "Remote group join aborted!" msgstr "" -#. TRANS: OStatus remote subscription dialog error. -#: actions/ostatussub.php:356 -msgid "Already subscribed!" +#. TRANS: Page title for OStatus remote group join form +#: actions/ostatusgroup.php:163 +msgid "Confirm joining remote group" msgstr "" -#. TRANS: OStatus remote subscription dialog error. -#: actions/ostatussub.php:361 -msgid "Remote subscription failed!" +#: actions/ostatusgroup.php:174 +msgid "" +"You can subscribe to groups from other supported sites. Paste the group's " +"profile URI below:" msgstr "" -#. TRANS: Page title for OStatus remote subscription form -#: actions/ostatussub.php:459 -msgid "Authorize subscription" +#: actions/groupsalmon.php:51 +msgid "Can't accept remote posts for a remote group." msgstr "" -#: actions/ostatussub.php:470 -msgid "" -"You can subscribe to users from other supported sites. Paste their address " -"or profile URI below:" +#: actions/groupsalmon.php:124 +msgid "Can't read profile to set up group membership." msgstr "" -#: classes/Ostatus_profile.php:789 -#, php-format -msgid "Tried to update avatar for unsaved remote profile %s" +#: actions/groupsalmon.php:127 actions/groupsalmon.php:170 +msgid "Groups can't join groups." msgstr "" -#: classes/Ostatus_profile.php:797 +#: actions/groupsalmon.php:154 #, php-format -msgid "Unable to fetch avatar from %s" +msgid "Could not join remote user %1$s to group %2$s." msgstr "" -#: lib/salmonaction.php:41 -msgid "This method requires a POST." +#: actions/groupsalmon.php:167 +msgid "Can't read profile to cancel group membership." msgstr "" -#: lib/salmonaction.php:45 -msgid "Salmon requires application/magic-envelope+xml" +#: actions/groupsalmon.php:183 +#, php-format +msgid "Could not remove remote user %1$s from group %2$s." msgstr "" -#: lib/salmonaction.php:55 -msgid "Salmon signature verification failed." +#: actions/ostatussub.php:65 +msgid "Subscribe to" msgstr "" -#: lib/salmonaction.php:67 -msgid "Salmon post must be an Atom entry." +#: actions/ostatussub.php:67 +msgid "" +"OStatus user's address, like nickname@example.com or http://example.net/" +"nickname" msgstr "" -#: lib/salmonaction.php:115 -msgid "Unrecognized activity type." +#: actions/ostatussub.php:106 +msgid "Join this group" msgstr "" -#: lib/salmonaction.php:123 -msgid "This target doesn't understand posts." +#. TRANS: Page title for OStatus remote subscription form +#: actions/ostatussub.php:108 actions/ostatussub.php:400 +msgid "Confirm" msgstr "" -#: lib/salmonaction.php:128 -msgid "This target doesn't understand follows." +#: actions/ostatussub.php:109 +msgid "Subscribe to this user" msgstr "" -#: lib/salmonaction.php:133 -msgid "This target doesn't understand unfollows." +#: actions/ostatussub.php:130 +msgid "You are already subscribed to this user." msgstr "" -#: lib/salmonaction.php:138 -msgid "This target doesn't understand favorites." +#: actions/ostatussub.php:247 actions/ostatussub.php:253 +#: actions/ostatussub.php:272 +msgid "" +"Sorry, we could not reach that address. Please make sure that the OStatus " +"address is like nickname@example.com or http://example.net/nickname" msgstr "" -#: lib/salmonaction.php:143 -msgid "This target doesn't understand unfavorites." +#: actions/ostatussub.php:256 actions/ostatussub.php:259 +#: actions/ostatussub.php:262 actions/ostatussub.php:265 +#: actions/ostatussub.php:268 +msgid "" +"Sorry, we could not reach that feed. Please try that OStatus address again " +"later." msgstr "" -#: lib/salmonaction.php:148 -msgid "This target doesn't understand share events." +#. TRANS: OStatus remote subscription dialog error. +#: actions/ostatussub.php:301 +msgid "Already subscribed!" msgstr "" -#: lib/salmonaction.php:153 -msgid "This target doesn't understand joins." +#. TRANS: OStatus remote subscription dialog error. +#: actions/ostatussub.php:306 +msgid "Remote subscription failed!" msgstr "" -#: lib/salmonaction.php:158 -msgid "This target doesn't understand leave events." +#: actions/ostatussub.php:380 actions/ostatusinit.php:81 +msgid "Subscribe to user" msgstr "" -#: OStatusPlugin.php:319 -#, php-format -msgid "Sent from %s via OStatus" +#: actions/ostatussub.php:411 +msgid "" +"You can subscribe to users from other supported sites. Paste their address " +"or profile URI below:" msgstr "" -#: OStatusPlugin.php:371 -msgid "Could not set up remote subscription." +#: actions/ostatusinit.php:41 +msgid "You can use the local subscription!" msgstr "" -#: OStatusPlugin.php:487 -msgid "Could not set up remote group membership." +#: actions/ostatusinit.php:63 +msgid "There was a problem with your session token. Try again, please." msgstr "" -#: OStatusPlugin.php:504 +#: actions/ostatusinit.php:95 #, php-format -msgid "%s has joined group %s." +msgid "Join group %s" msgstr "" -#: OStatusPlugin.php:512 -msgid "Failed joining remote group." +#: actions/ostatusinit.php:98 +#, php-format +msgid "Subscribe to %s" msgstr "" -#: OStatusPlugin.php:553 -msgid "Leave" +#: actions/ostatusinit.php:111 +msgid "User nickname" msgstr "" -#: OStatusPlugin.php:554 -#, php-format -msgid "%s has left group %s." +#: actions/ostatusinit.php:112 +msgid "Nickname of the user you want to follow" msgstr "" -#: OStatusPlugin.php:685 -msgid "Subscribe to remote user" +#: actions/ostatusinit.php:116 +msgid "Profile Account" msgstr "" -#: OStatusPlugin.php:726 -msgid "Profile update" +#: actions/ostatusinit.php:117 +msgid "Your account id (i.e. user@identi.ca)" msgstr "" -#: OStatusPlugin.php:727 -#, php-format -msgid "%s has updated their profile page." +#: actions/ostatusinit.php:138 +msgid "Must provide a remote profile." msgstr "" -#: tests/gettext-speedtest.php:57 -msgid "Feeds" +#: actions/ostatusinit.php:149 +msgid "Couldn't look up OStatus account profile." +msgstr "" + +#: actions/ostatusinit.php:161 +msgid "Couldn't confirm remote profile address." +msgstr "" + +#: actions/ostatusinit.php:202 +msgid "OStatus Connect" msgstr "" diff --git a/plugins/OStatus/locale/fr/LC_MESSAGES/OStatus.po b/plugins/OStatus/locale/fr/LC_MESSAGES/OStatus.po deleted file mode 100644 index 0956d2f9b..000000000 --- a/plugins/OStatus/locale/fr/LC_MESSAGES/OStatus.po +++ /dev/null @@ -1,109 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-12-07 14:14-0800\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: LANGUAGE <LL@li.org>\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: FeedSubPlugin.php:77 -msgid "Feeds" -msgstr "Flux" - -#: FeedSubPlugin.php:78 -msgid "Feed subscription options" -msgstr "Préférences pour abonnement flux" - -#: feedmunger.php:215 -#, php-format -msgid "New post: \"%1$s\" %2$s" -msgstr "Nouveau: \"%1$s\" %2$s" - -#: actions/feedsubsettings.php:41 -msgid "Feed subscriptions" -msgstr "Abonnements aux fluxes" - -#: actions/feedsubsettings.php:52 -msgid "" -"You can subscribe to feeds from other sites; updates will appear in your " -"personal timeline." -msgstr "" -"Abonner aux fluxes RSS ou Atom des autres sites web; les temps se trouverair" -"en votre flux personnel." - -#: actions/feedsubsettings.php:96 -msgid "Subscribe" -msgstr "Abonner" - -#: actions/feedsubsettings.php:98 -msgid "Continue" -msgstr "Prochaine" - -#: actions/feedsubsettings.php:151 -msgid "Empty feed URL!" -msgstr "" - -#: actions/feedsubsettings.php:161 -msgid "Invalid URL or could not reach server." -msgstr "" - -#: actions/feedsubsettings.php:164 -msgid "Cannot read feed; server returned error." -msgstr "" - -#: actions/feedsubsettings.php:167 -msgid "Cannot read feed; server returned an empty page." -msgstr "" - -#: actions/feedsubsettings.php:170 -msgid "Bad HTML, could not find feed link." -msgstr "" - -#: actions/feedsubsettings.php:173 -msgid "Could not find a feed linked from this URL." -msgstr "" - -#: actions/feedsubsettings.php:176 -msgid "Not a recognized feed type." -msgstr "" - -#: actions/feedsubsettings.php:180 -msgid "Bad feed URL." -msgstr "" - -#: actions/feedsubsettings.php:188 -msgid "Feed is not PuSH-enabled; cannot subscribe." -msgstr "" - -#: actions/feedsubsettings.php:208 -msgid "Feed subscription failed! Bad response from hub." -msgstr "" - -#: actions/feedsubsettings.php:218 -msgid "Already subscribed!" -msgstr "" - -#: actions/feedsubsettings.php:220 -msgid "Feed subscribed!" -msgstr "" - -#: actions/feedsubsettings.php:222 -msgid "Feed subscription failed!" -msgstr "" - -#: actions/feedsubsettings.php:231 -msgid "Previewing feed:" -msgstr "" - -msgid "Confirm" -msgstr "Confirmer" diff --git a/plugins/OStatus/scripts/resub-feed.php b/plugins/OStatus/scripts/resub-feed.php new file mode 100644 index 000000000..121d12109 --- /dev/null +++ b/plugins/OStatus/scripts/resub-feed.php @@ -0,0 +1,74 @@ +#!/usr/bin/env php +<?php +/* + * StatusNet - a distributed open-source microblogging tool + * Copyright (C) 2010, StatusNet, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +define('INSTALLDIR', realpath(dirname(__FILE__) . '/../../..')); + +$helptext = <<<END_OF_HELP +resub-feed.php [options] http://example.com/atom-feed-url +Reinitialize the PuSH subscription for the given feed. This may help get +things restarted if we and the hub have gotten our states out of sync. + + +END_OF_HELP; + +require_once INSTALLDIR.'/scripts/commandline.inc'; + +if (empty($args[0]) || !Validate::uri($args[0])) { + print "$helptext"; + exit(1); +} + +$feedurl = $args[0]; + + +$sub = FeedSub::staticGet('topic', $feedurl); +if (!$sub) { + print "Feed $feedurl is not subscribed.\n"; + exit(1); +} + +print "Old state:\n"; +showSub($sub); + +print "\n"; +print "Pinging hub $sub->huburi with new subscription for $sub->uri\n"; +$ok = $sub->subscribe(); + +if ($ok) { + print "ok\n"; +} else { + print "Could not confirm.\n"; +} + +$sub2 = FeedSub::staticGet('topic', $feedurl); + +print "\n"; +print "New state:\n"; +showSub($sub2); + +function showSub($sub) +{ + print " Subscription state: $sub->sub_state\n"; + print " Verify token: $sub->verify_token\n"; + print " Signature secret: $sub->secret\n"; + print " Sub start date: $sub->sub_start\n"; + print " Record created: $sub->created\n"; + print " Record modified: $sub->modified\n"; +} diff --git a/plugins/OStatus/scripts/update-profile.php b/plugins/OStatus/scripts/update-profile.php new file mode 100644 index 000000000..d06de4f90 --- /dev/null +++ b/plugins/OStatus/scripts/update-profile.php @@ -0,0 +1,147 @@ +#!/usr/bin/env php +<?php +/* + * StatusNet - a distributed open-source microblogging tool + * Copyright (C) 2010, StatusNet, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +define('INSTALLDIR', realpath(dirname(__FILE__) . '/../../..')); + +$helptext = <<<END_OF_HELP +update-profile.php [options] http://example.com/profile/url + +Rerun profile and feed info discovery for the given OStatus remote profile, +and reinitialize its PuSH subscription for the given feed. This may help get +things restarted if the hub or feed URLs have changed for the profile. + + +END_OF_HELP; + +require_once INSTALLDIR.'/scripts/commandline.inc'; + +if (empty($args[0]) || !Validate::uri($args[0])) { + print "$helptext"; + exit(1); +} + +$uri = $args[0]; + + +$oprofile = Ostatus_profile::staticGet('uri', $uri); + +if (!$oprofile) { + print "No OStatus remote profile known for URI $uri\n"; + exit(1); +} + +print "Old profile state for $oprofile->uri\n"; +showProfile($oprofile); + +print "\n"; +print "Re-running feed discovery for profile URL $oprofile->uri\n"; +// @fixme will bork where the URI isn't the profile URL for now +$discover = new FeedDiscovery(); +$feedurl = $discover->discoverFromURL($oprofile->uri); +$huburi = $discover->getAtomLink('hub'); +$salmonuri = $discover->getAtomLink(Salmon::NS_REPLIES); + +print " Feed URL: $feedurl\n"; +print " Hub URL: $huburi\n"; +print " Salmon URL: $salmonuri\n"; + +if ($feedurl != $oprofile->feeduri || $salmonuri != $oprofile->salmonuri) { + print "\n"; + print "Updating...\n"; + // @fixme update keys :P + #$orig = clone($oprofile); + #$oprofile->feeduri = $feedurl; + #$oprofile->salmonuri = $salmonuri; + #$ok = $oprofile->update($orig); + $ok = $oprofile->query('UPDATE ostatus_profile SET ' . + 'feeduri=\'' . $oprofile->escape($feedurl) . '\',' . + 'salmonuri=\'' . $oprofile->escape($salmonuri) . '\' ' . + 'WHERE uri=\'' . $oprofile->escape($uri) . '\''); + + if (!$ok) { + print "Failed to update profile record...\n"; + exit(1); + } + + $oprofile->decache(); +} else { + print "\n"; + print "Ok, ostatus_profile record unchanged.\n\n"; +} + +$sub = FeedSub::ensureFeed($feedurl); + +if ($huburi != $sub->huburi) { + print "\n"; + print "Updating hub record for feed; was $sub->huburi\n"; + $orig = clone($sub); + $sub->huburi = $huburi; + $ok = $sub->update($orig); + + if (!$ok) { + print "Failed to update sub record...\n"; + exit(1); + } +} else { + print "\n"; + print "Feed record ok, not changing.\n\n"; +} + +print "\n"; +print "Pinging hub $sub->huburi with new subscription for $sub->uri\n"; +$ok = $sub->subscribe(); + +if ($ok) { + print "ok\n"; +} else { + print "Could not confirm.\n"; +} + +$o2 = Ostatus_profile::staticGet('uri', $uri); + +print "\n"; +print "New profile state:\n"; +showProfile($o2); + +print "\n"; +print "New feed state:\n"; +$sub2 = FeedSub::ensureFeed($feedurl); +showSub($sub2); + +function showProfile($oprofile) +{ + print " Feed URL: $oprofile->feeduri\n"; + print " Salmon URL: $oprofile->salmonuri\n"; + print " Avatar URL: $oprofile->avatar\n"; + print " Profile ID: $oprofile->profile_id\n"; + print " Group ID: $oprofile->group_id\n"; + print " Record created: $oprofile->created\n"; + print " Record modified: $oprofile->modified\n"; +} + +function showSub($sub) +{ + print " Subscription state: $sub->sub_state\n"; + print " Verify token: $sub->verify_token\n"; + print " Signature secret: $sub->secret\n"; + print " Sub start date: $sub->sub_start\n"; + print " Record created: $sub->created\n"; + print " Record modified: $sub->modified\n"; +} |