diff --git a/mod/item.php b/mod/item.php index ce4cd45ca7..26dcef91cd 100644 --- a/mod/item.php +++ b/mod/item.php @@ -138,7 +138,7 @@ function item_post(App $a) { // When commenting on a public post then store the post for the current user // This enables interaction like starring and saving into folders if ($toplevel_item['uid'] == 0) { - $stored = Item::storeForUserByUriId($toplevel_item['uri-id'], local_user()); + $stored = Item::storeForUserByUriId($toplevel_item['uri-id'], local_user(), ['post-reason' => Item::PR_ACTIVITY]); Logger::info('Public item stored for user', ['uri-id' => $toplevel_item['uri-id'], 'uid' => $uid, 'stored' => $stored]); if ($stored) { $toplevel_item = Post::selectFirst(Item::ITEM_FIELDLIST, ['id' => $stored]); diff --git a/src/Content/Conversation.php b/src/Content/Conversation.php index 5bb47b23b1..3941c514a9 100644 --- a/src/Content/Conversation.php +++ b/src/Content/Conversation.php @@ -857,7 +857,7 @@ class Conversation $row['direction'] = ['direction' => 6, 'title' => $this->l10n->t('You are following %s.', $row['author-name'])]; break; case ItemModel::PR_TAG: - $row['direction'] = ['direction' => 4, 'title' => $this->l10n->t('Tagged')]; + $row['direction'] = ['direction' => 4, 'title' => $this->l10n->t('You subscribed to one or more tags in this post.')]; break; case ItemModel::PR_ANNOUNCEMENT: if (!empty($row['causer-id']) && $this->pConfig->get(local_user(), 'system', 'display_resharer')) { @@ -878,17 +878,32 @@ class Conversation $row['direction'] = ['direction' => 5, 'title' => $this->l10n->t('%s is participating in this thread.', $row['author-name'])]; break; case ItemModel::PR_STORED: - $row['direction'] = ['direction' => 8, 'title' => $this->l10n->t('Stored')]; + $row['direction'] = ['direction' => 8, 'title' => $this->l10n->t('Stored for general reasons')]; break; case ItemModel::PR_GLOBAL: - $row['direction'] = ['direction' => 9, 'title' => $this->l10n->t('Global')]; + $row['direction'] = ['direction' => 9, 'title' => $this->l10n->t('Global post')]; break; case ItemModel::PR_RELAY: - $row['direction'] = ['direction' => 10, 'title' => (empty($row['causer-id']) ? $this->l10n->t('Relayed') : $this->l10n->t('Relayed by %s <%s>', $row['causer-name'], $row['causer-link']))]; + $row['direction'] = ['direction' => 10, 'title' => (empty($row['causer-id']) ? $this->l10n->t('Sent via an relay server') : $this->l10n->t('Sent via the relay server %s <%s>', $row['causer-name'], $row['causer-link']))]; break; case ItemModel::PR_FETCHED: $row['direction'] = ['direction' => 2, 'title' => (empty($row['causer-id']) ? $this->l10n->t('Fetched') : $this->l10n->t('Fetched because of %s <%s>', $row['causer-name'], $row['causer-link']))]; break; + case ItemModel::PR_COMPLETION: + $row['direction'] = ['direction' => 2, 'title' => $this->l10n->t('Stored because of a child post to complete this thread.')]; + break; + case ItemModel::PR_DIRECT: + $row['direction'] = ['direction' => 6, 'title' => $this->l10n->t('Local delivery')]; + break; + case ItemModel::PR_ACTIVITY: + $row['direction'] = ['direction' => 2, 'title' => $this->l10n->t('Stored because of your activity (like, comment, star, ...)')]; + break; + case ItemModel::PR_DISTRIBUTE: + $row['direction'] = ['direction' => 6, 'title' => $this->l10n->t('Distributed')]; + break; + case ItemModel::PR_PUSHED: + $row['direction'] = ['direction' => 1, 'title' => $this->l10n->t('Pushed to us')]; + break; } $row['thr-parent-row'] = $thr_parent; diff --git a/src/Model/APContact.php b/src/Model/APContact.php index bb6f12e10c..38ec423e89 100644 --- a/src/Model/APContact.php +++ b/src/Model/APContact.php @@ -383,11 +383,11 @@ class APContact if (strlen($apcontact['photo']) > 255) { $parts = parse_url($apcontact['photo']); unset($parts['fragment']); - $apcontact['photo'] = Uri::fromParts($parts); + $apcontact['photo'] = (string)Uri::fromParts($parts); if (strlen($apcontact['photo']) > 255) { unset($parts['query']); - $apcontact['photo'] = Uri::fromParts($parts); + $apcontact['photo'] = (string)Uri::fromParts($parts); } if (strlen($apcontact['photo']) > 255) { diff --git a/src/Model/Item.php b/src/Model/Item.php index 55022519aa..6772a85fa2 100644 --- a/src/Model/Item.php +++ b/src/Model/Item.php @@ -44,6 +44,7 @@ use Friendica\Util\Proxy; use Friendica\Util\Strings; use Friendica\Util\Temporal; use Friendica\Worker\Delivery; +use GuzzleHttp\Psr7\Uri; use LanguageDetection\Language; class Item @@ -74,6 +75,12 @@ class Item const PR_GLOBAL = 73; const PR_RELAY = 74; const PR_FETCHED = 75; + const PR_COMPLETION = 76; + const PR_DIRECT = 77; + const PR_ACTIVITY = 78; + const PR_DISTRIBUTE = 79; + const PR_PUSHED = 80; + const PR_LOCAL = 81; // system.accept_only_sharer setting values const COMPLETION_NONE = 1; @@ -688,9 +695,9 @@ class Item $parent = Post::selectFirst($fields, $condition, $params); if (!DBA::isResult($parent) && Post::exists(['uri-id' => [$item['thr-parent-id'], $item['parent-uri-id']], 'uid' => 0])) { - $stored = Item::storeForUserByUriId($item['thr-parent-id'], $item['uid']); + $stored = Item::storeForUserByUriId($item['thr-parent-id'], $item['uid'], ['post-reason' => Item::PR_COMPLETION]); if (!$stored && ($item['thr-parent-id'] != $item['parent-uri-id'])) { - $stored = Item::storeForUserByUriId($item['parent-uri-id'], $item['uid']); + $stored = Item::storeForUserByUriId($item['parent-uri-id'], $item['uid'], ['post-reason' => Item::PR_COMPLETION]); } if ($stored) { Logger::info('Stored thread parent item for user', ['uri-id' => $item['thr-parent-id'], 'uid' => $item['uid'], 'stored' => $stored]); @@ -714,7 +721,7 @@ class Item $toplevel_parent = Post::selectFirst($fields, $condition, $params); if (!DBA::isResult($toplevel_parent) && $item['origin']) { - $stored = Item::storeForUserByUriId($item['parent-uri-id'], $item['uid']); + $stored = Item::storeForUserByUriId($item['parent-uri-id'], $item['uid'], ['post-reason' => Item::PR_COMPLETION]); Logger::info('Stored parent item for user', ['uri-id' => $item['parent-uri-id'], 'uid' => $item['uid'], 'stored' => $stored]); $toplevel_parent = Post::selectFirst($fields, $condition, $params); } @@ -903,6 +910,10 @@ class Item $item['post-reason'] = self::PR_FOLLOWER; } + if ($item['origin'] && empty($item['post-reason'])) { + $item['post-reason'] = self::PR_LOCAL; + } + // Ensure that there is an avatar cache Contact::checkAvatarCache($item['author-id']); Contact::checkAvatarCache($item['owner-id']); @@ -1355,14 +1366,8 @@ class Item $uids = Tag::getUIDListByURIId($item['uri-id']); foreach ($uids as $uid) { - if (Contact::isSharing($item['author-id'], $uid)) { - $fields = []; - } else { - $fields = ['post-reason' => self::PR_TAG]; - } - - $stored = self::storeForUserByUriId($item['uri-id'], $uid, $fields); - Logger::info('Stored item for users', ['uri-id' => $item['uri-id'], 'uid' => $uid, 'fields' => $fields, 'stored' => $stored]); + $stored = self::storeForUserByUriId($item['uri-id'], $uid, ['post-reason' => self::PR_TAG]); + Logger::info('Stored item for users', ['uri-id' => $item['uri-id'], 'uid' => $uid, 'stored' => $stored]); } } @@ -1454,6 +1459,7 @@ class Item if ($origin_uid == $uid) { $item['diaspora_signed_text'] = $signed_text; } + $item['post-reason'] = self::PR_DISTRIBUTE; self::storeForUser($item, $uid); } } @@ -1605,7 +1611,6 @@ class Item unset($item['event-id']); unset($item['hidden']); unset($item['notification-type']); - unset($item['post-reason']); // Data from the "post-delivery-data" table unset($item['postopts']); @@ -2488,7 +2493,7 @@ class Item } if (!Post::exists(['uri-id' => $item['parent-uri-id'], 'uid' => $uid])) { - $stored = self::storeForUserByUriId($item['parent-uri-id'], $uid); + $stored = self::storeForUserByUriId($item['parent-uri-id'], $uid, ['post-reason' => Item::PR_ACTIVITY]); if (($item['parent-uri-id'] == $item['uri-id']) && !empty($stored)) { $item = Post::selectFirst(self::ITEM_FIELDLIST, ['id' => $stored]); if (!DBA::isResult($item)) { @@ -2946,9 +2951,13 @@ class Item { // Make sure that for example site parameters aren't used when testing if the link is contained in the body $urlparts = parse_url($url); - unset($urlparts['query']); - unset($urlparts['fragment']); - $url = Network::unparseURL($urlparts); + if (!empty($urlparts)) { + unset($urlparts['query']); + unset($urlparts['fragment']); + $url = (string)Uri::fromParts($urlparts); + } else { + return false; + } // Remove media links to only search in embedded content // @todo Check images for image link, audio for audio links, ... diff --git a/src/Module/Api/Mastodon/Statuses/Bookmark.php b/src/Module/Api/Mastodon/Statuses/Bookmark.php index 95a072889c..cebb061927 100644 --- a/src/Module/Api/Mastodon/Statuses/Bookmark.php +++ b/src/Module/Api/Mastodon/Statuses/Bookmark.php @@ -52,7 +52,7 @@ class Bookmark extends BaseApi } if ($item['uid'] == 0) { - $stored = Item::storeForUserByUriId($this->parameters['id'], $uid); + $stored = Item::storeForUserByUriId($this->parameters['id'], $uid, ['post-reason' => Item::PR_ACTIVITY]); if (!empty($stored)) { $item = Post::selectFirst(['id', 'gravity'], ['id' => $stored]); if (!DBA::isResult($item)) { diff --git a/src/Module/Api/Mastodon/Statuses/Unbookmark.php b/src/Module/Api/Mastodon/Statuses/Unbookmark.php index 103fac04af..f90916176d 100644 --- a/src/Module/Api/Mastodon/Statuses/Unbookmark.php +++ b/src/Module/Api/Mastodon/Statuses/Unbookmark.php @@ -52,7 +52,7 @@ class Unbookmark extends BaseApi } if ($item['uid'] == 0) { - $stored = Item::storeForUserByUriId($this->parameters['id'], $uid); + $stored = Item::storeForUserByUriId($this->parameters['id'], $uid, ['post-reason' => Item::PR_ACTIVITY]); if (!empty($stored)) { $item = Post::selectFirst(['id', 'gravity'], ['id' => $stored]); if (!DBA::isResult($item)) { diff --git a/src/Module/Item/Star.php b/src/Module/Item/Star.php index 8f444d54ed..660095103d 100644 --- a/src/Module/Item/Star.php +++ b/src/Module/Item/Star.php @@ -56,7 +56,7 @@ class Star extends BaseModule } if ($item['uid'] == 0) { - $stored = Item::storeForUserByUriId($item['uri-id'], local_user()); + $stored = Item::storeForUserByUriId($item['uri-id'], local_user(), ['post-reason' => Item::PR_ACTIVITY]); if (!empty($stored)) { $item = Post::selectFirst(['starred'], ['id' => $stored]); if (!DBA::isResult($item)) { diff --git a/src/Protocol/ActivityPub/Delivery.php b/src/Protocol/ActivityPub/Delivery.php index fac8536d67..6e97b0b927 100644 --- a/src/Protocol/ActivityPub/Delivery.php +++ b/src/Protocol/ActivityPub/Delivery.php @@ -110,10 +110,7 @@ class Delivery } elseif ($cmd == WorkerDelivery::PROFILEUPDATE) { $success = ActivityPub\Transmitter::sendProfileUpdate($uid, $inbox); } else { - $data = Post\Activity::getByURIId($uri_id); - if (empty($data)) { - $data = ActivityPub\Transmitter::createCachedActivityFromItem($item_id); - } + $data = ActivityPub\Transmitter::createCachedActivityFromItem($item_id); if (!empty($data)) { $timestamp = microtime(true); $response = HTTPSignature::post($data, $inbox, $uid); diff --git a/src/Protocol/ActivityPub/Processor.php b/src/Protocol/ActivityPub/Processor.php index 60dd42cb49..2438c68c6b 100644 --- a/src/Protocol/ActivityPub/Processor.php +++ b/src/Protocol/ActivityPub/Processor.php @@ -363,10 +363,10 @@ class Processor if (!empty($activity['raw'])) { $item['source'] = $activity['raw']; $item['protocol'] = Conversation::PARCEL_ACTIVITYPUB; + } - if (isset($activity['push'])) { - $item['direction'] = $activity['push'] ? Conversation::PUSH : Conversation::PULL; - } + if (isset($activity['push'])) { + $item['direction'] = $activity['push'] ? Conversation::PUSH : Conversation::PULL; } if (!empty($activity['from-relay'])) { @@ -900,6 +900,8 @@ class Processor $item['post-reason'] = Item::PR_RELAY; } elseif (!empty($activity['thread-completion'])) { $item['post-reason'] = Item::PR_FETCHED; + } elseif (in_array($item['post-reason'], [Item::PR_GLOBAL, Item::PR_NONE]) && !empty($activity['push'])) { + $item['post-reason'] = Item::PR_PUSHED; } if ($item['isForum'] ?? false) { diff --git a/src/Protocol/ActivityPub/Receiver.php b/src/Protocol/ActivityPub/Receiver.php index 600fe31524..2231d0acbd 100644 --- a/src/Protocol/ActivityPub/Receiver.php +++ b/src/Protocol/ActivityPub/Receiver.php @@ -986,7 +986,7 @@ class Receiver } if (!empty($reply)) { - $parents = Post::select(['uid'], ['uri' => $reply]); + $parents = Post::select(['uid'], DBA::mergeConditions(['uri' => $reply], ["`uid` != ?", 0])); while ($parent = Post::fetch($parents)) { $receivers[$parent['uid']] = ['uid' => $parent['uid'], 'type' => self::TARGET_ANSWER]; } diff --git a/src/Protocol/ActivityPub/Transmitter.php b/src/Protocol/ActivityPub/Transmitter.php index ddf4957946..ecd1843185 100644 --- a/src/Protocol/ActivityPub/Transmitter.php +++ b/src/Protocol/ActivityPub/Transmitter.php @@ -1233,26 +1233,20 @@ class Transmitter if (!$item['deleted']) { $data = Post\Activity::getByURIId($item['uri-id']); if (!$item['origin'] && !empty($data)) { - if (!empty($data['type'])) { - if (in_array($data['type'], ['Create', 'Update'])) { - if ($object_mode) { - unset($data['@context']); - unset($data['signature']); - } - Logger::info('Return stored conversation', ['item' => $item_id]); - return $data; - } elseif (in_array('as:' . $data['type'], Receiver::CONTENT_TYPES)) { - if (!empty($data['@context'])) { - $context = $data['@context']; - unset($data['@context']); - } - unset($data['actor']); - $object = $data; - } + if ($object_mode) { + unset($data['@context']); + unset($data['signature']); } + Logger::info('Return stored conversation', ['item' => $item_id]); + return $data; } } + if (!$item['origin'] && empty($object)) { + Logger::debug('Post is not ours and is not stored', ['id' => $item_id, 'uri-id' => $item['uri-id']]); + return false; + } + $type = self::getTypeOfItem($item); if (!$object_mode) { diff --git a/src/Protocol/DFRN.php b/src/Protocol/DFRN.php index db3360dd16..3d4c137a5e 100644 --- a/src/Protocol/DFRN.php +++ b/src/Protocol/DFRN.php @@ -998,7 +998,7 @@ class DFRN $path_parts = explode('/', $parts['path']); array_pop($path_parts); $parts['path'] = implode('/', $path_parts); - $contact['batch'] = Uri::fromParts($parts); + $contact['batch'] = (string)Uri::fromParts($parts); } $dest_url = ($public_batch ? $contact['batch'] : $contact['notify']); diff --git a/src/Protocol/Diaspora.php b/src/Protocol/Diaspora.php index cc02936695..c5ad51215b 100644 --- a/src/Protocol/Diaspora.php +++ b/src/Protocol/Diaspora.php @@ -1419,7 +1419,7 @@ class Diaspora $parts = parse_url($person['url']); unset($parts['path']); - $host_url = Uri::fromParts($parts); + $host_url = (string)Uri::fromParts($parts); return $host_url . '/objects/' . $guid; } diff --git a/src/Util/Network.php b/src/Util/Network.php index 23def7e57f..63cc67f4c9 100644 --- a/src/Util/Network.php +++ b/src/Util/Network.php @@ -497,7 +497,7 @@ class Network $parts = parse_url($uri); if (!empty($parts['scheme']) && !empty($parts['host'])) { $parts['host'] = idn_to_ascii($parts['host']); - $uri = Uri::fromParts($parts); + $uri = (string)Uri::fromParts($parts); } else { $parts = explode('@', $uri); if (count($parts) == 2) { diff --git a/src/Worker/Notifier.php b/src/Worker/Notifier.php index 8655d2662e..36d1a76b73 100644 --- a/src/Worker/Notifier.php +++ b/src/Worker/Notifier.php @@ -506,7 +506,7 @@ class Notifier // Direct delivery of local contacts if (!in_array($cmd, [Delivery::RELOCATION, Delivery::SUGGESTION, Delivery::DELETION, Delivery::MAIL]) && $target_uid = User::getIdForURL($contact['url'])) { Logger::info('Direct delivery', ['uri-id' => $target_item['uri-id'], 'target' => $target_uid]); - $fields = ['protocol' => Conversation::PARCEL_LOCAL_DFRN, 'direction' => Conversation::PUSH]; + $fields = ['protocol' => Conversation::PARCEL_LOCAL_DFRN, 'direction' => Conversation::PUSH, 'post-reason' => Item::PR_DIRECT]; Item::storeForUserByUriId($target_item['uri-id'], $target_uid, $fields, $target_item['uid']); continue; } diff --git a/view/lang/C/messages.po b/view/lang/C/messages.po index be5ecdca5a..16f7081221 100644 --- a/view/lang/C/messages.po +++ b/view/lang/C/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: 2022.09-dev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-07-27 22:28-0400\n" +"POT-Creation-Date: 2022-07-29 21:32+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -1411,7 +1411,7 @@ msgstr "" msgid "Friend Suggestions" msgstr "" -#: mod/tagger.php:78 src/Content/Item.php:354 src/Model/Item.php:2749 +#: mod/tagger.php:78 src/Content/Item.php:354 src/Model/Item.php:2754 msgid "photo" msgstr "" @@ -2111,7 +2111,7 @@ msgid "You are following %s." msgstr "" #: src/Content/Conversation.php:860 -msgid "Tagged" +msgid "You subscribed to one or more tags in this post." msgstr "" #: src/Content/Conversation.php:875 @@ -2129,20 +2129,20 @@ msgid "%s is participating in this thread." msgstr "" #: src/Content/Conversation.php:881 -msgid "Stored" +msgid "Stored for general reasons" msgstr "" #: src/Content/Conversation.php:884 -msgid "Global" +msgid "Global post" msgstr "" #: src/Content/Conversation.php:887 -msgid "Relayed" +msgid "Sent via an relay server" msgstr "" #: src/Content/Conversation.php:887 #, php-format -msgid "Relayed by %s <%s>" +msgid "Sent via the relay server %s <%s>" msgstr "" #: src/Content/Conversation.php:890 @@ -2154,6 +2154,26 @@ msgstr "" msgid "Fetched because of %s <%s>" msgstr "" +#: src/Content/Conversation.php:893 +msgid "Stored because of a child post to complete this thread." +msgstr "" + +#: src/Content/Conversation.php:896 +msgid "Local delivery" +msgstr "" + +#: src/Content/Conversation.php:899 +msgid "Stored because of your activity (like, comment, star, ...)" +msgstr "" + +#: src/Content/Conversation.php:902 +msgid "Distributed" +msgstr "" + +#: src/Content/Conversation.php:905 +msgid "Pushed to us" +msgstr "" + #: src/Content/Feature.php:96 msgid "General Features" msgstr "" @@ -2275,7 +2295,7 @@ msgstr "" msgid "%1$s poked %2$s" msgstr "" -#: src/Content/Item.php:345 src/Model/Item.php:2747 +#: src/Content/Item.php:345 src/Model/Item.php:2752 msgid "event" msgstr "" @@ -2626,8 +2646,8 @@ msgid "" "%2$s %3$s" msgstr "" -#: src/Content/Text/BBCode.php:1213 src/Model/Item.php:3322 -#: src/Model/Item.php:3328 src/Model/Item.php:3329 +#: src/Content/Text/BBCode.php:1213 src/Model/Item.php:3331 +#: src/Model/Item.php:3337 src/Model/Item.php:3338 msgid "Link to source" msgstr "" @@ -3812,58 +3832,58 @@ msgstr "" msgid "Edit groups" msgstr "" -#: src/Model/Item.php:1845 +#: src/Model/Item.php:1850 #, php-format msgid "Detected languages in this post:\\n%s" msgstr "" -#: src/Model/Item.php:2751 +#: src/Model/Item.php:2756 msgid "activity" msgstr "" -#: src/Model/Item.php:2753 +#: src/Model/Item.php:2758 msgid "comment" msgstr "" -#: src/Model/Item.php:2756 +#: src/Model/Item.php:2761 msgid "post" msgstr "" -#: src/Model/Item.php:2872 +#: src/Model/Item.php:2877 #, php-format msgid "Content warning: %s" msgstr "" -#: src/Model/Item.php:3231 +#: src/Model/Item.php:3240 msgid "bytes" msgstr "" -#: src/Model/Item.php:3265 -#, php-format -msgid "%s (%d%s, %d votes)" -msgstr "" - -#: src/Model/Item.php:3267 -#, php-format -msgid "%s (%d votes)" -msgstr "" - -#: src/Model/Item.php:3272 -#, php-format -msgid "%d voters. Poll end: %s" -msgstr "" - #: src/Model/Item.php:3274 #, php-format -msgid "%d voters." +msgid "%s (%d%s, %d votes)" msgstr "" #: src/Model/Item.php:3276 #, php-format +msgid "%s (%d votes)" +msgstr "" + +#: src/Model/Item.php:3281 +#, php-format +msgid "%d voters. Poll end: %s" +msgstr "" + +#: src/Model/Item.php:3283 +#, php-format +msgid "%d voters." +msgstr "" + +#: src/Model/Item.php:3285 +#, php-format msgid "Poll end: %s" msgstr "" -#: src/Model/Item.php:3310 src/Model/Item.php:3311 +#: src/Model/Item.php:3319 src/Model/Item.php:3320 msgid "View on separate page" msgstr "" @@ -4265,12 +4285,12 @@ msgid "" "\t\t\tThank you and welcome to %2$s." msgstr "" -#: src/Moderation/DomainPatternBlocklist.php:144 +#: src/Moderation/DomainPatternBlocklist.php:218 #, php-format msgid "[%s] Notice of remote server domain pattern block list update" msgstr "" -#: src/Moderation/DomainPatternBlocklist.php:146 +#: src/Moderation/DomainPatternBlocklist.php:220 #, php-format msgid "" "Dear %s,\n" @@ -8424,19 +8444,19 @@ msgstr "" #: src/Module/Profile/Profile.php:326 src/Module/Profile/Profile.php:329 #: src/Module/Profile/Status.php:66 src/Module/Profile/Status.php:69 -#: src/Protocol/Feed.php:1018 src/Protocol/OStatus.php:1045 +#: src/Protocol/Feed.php:1018 src/Protocol/OStatus.php:1046 #, php-format msgid "%s's timeline" msgstr "" #: src/Module/Profile/Profile.php:327 src/Module/Profile/Status.php:67 -#: src/Protocol/Feed.php:1022 src/Protocol/OStatus.php:1050 +#: src/Protocol/Feed.php:1022 src/Protocol/OStatus.php:1051 #, php-format msgid "%s's posts" msgstr "" #: src/Module/Profile/Profile.php:328 src/Module/Profile/Status.php:68 -#: src/Protocol/Feed.php:1025 src/Protocol/OStatus.php:1054 +#: src/Protocol/Feed.php:1025 src/Protocol/OStatus.php:1055 #, php-format msgid "%s's comments" msgstr "" @@ -10946,21 +10966,21 @@ msgstr "" msgid "Show fewer" msgstr "" -#: src/Protocol/OStatus.php:1474 +#: src/Protocol/OStatus.php:1475 #, php-format msgid "%s is now following %s." msgstr "" -#: src/Protocol/OStatus.php:1475 +#: src/Protocol/OStatus.php:1476 msgid "following" msgstr "" -#: src/Protocol/OStatus.php:1478 +#: src/Protocol/OStatus.php:1479 #, php-format msgid "%s stopped following %s." msgstr "" -#: src/Protocol/OStatus.php:1479 +#: src/Protocol/OStatus.php:1480 msgid "stopped following" msgstr ""