Channels for audio, video and images

This commit is contained in:
Michael 2023-09-02 15:52:53 +00:00
parent fdaff43039
commit 30d10c60d2
7 changed files with 160 additions and 61 deletions

View file

@ -1307,6 +1307,7 @@ CREATE TABLE IF NOT EXISTS `post-engagement` (
`uri-id` int unsigned NOT NULL COMMENT 'Id of the item-uri table entry that contains the item uri', `uri-id` int unsigned NOT NULL COMMENT 'Id of the item-uri table entry that contains the item uri',
`owner-id` int unsigned NOT NULL DEFAULT 0 COMMENT 'Item owner', `owner-id` int unsigned NOT NULL DEFAULT 0 COMMENT 'Item owner',
`contact-type` tinyint NOT NULL DEFAULT 0 COMMENT 'Person, organisation, news, community, relay', `contact-type` tinyint NOT NULL DEFAULT 0 COMMENT 'Person, organisation, news, community, relay',
`media-type` tinyint NOT NULL DEFAULT 0 COMMENT 'Type of media in a bit array (1 = image, 2 = video, 4 = audio',
`created` datetime COMMENT '', `created` datetime COMMENT '',
`comments` mediumint unsigned COMMENT 'Number of comments', `comments` mediumint unsigned COMMENT 'Number of comments',
`activities` mediumint unsigned COMMENT 'Number of activities (like, dislike, ...)', `activities` mediumint unsigned COMMENT 'Number of activities (like, dislike, ...)',

View file

@ -6,14 +6,15 @@ Engagement data per post
Fields Fields
------ ------
| Field | Description | Type | Null | Key | Default | Extra | | Field | Description | Type | Null | Key | Default | Extra |
| ------------ | --------------------------------------------------------- | ------------------ | ---- | --- | ------- | ----- | | ------------ | ------------------------------------------------------------- | ------------------ | ---- | --- | ------- | ----- |
| uri-id | Id of the item-uri table entry that contains the item uri | int unsigned | NO | PRI | NULL | | | uri-id | Id of the item-uri table entry that contains the item uri | int unsigned | NO | PRI | NULL | |
| owner-id | Item owner | int unsigned | NO | | 0 | | | owner-id | Item owner | int unsigned | NO | | 0 | |
| contact-type | Person, organisation, news, community, relay | tinyint | NO | | 0 | | | contact-type | Person, organisation, news, community, relay | tinyint | NO | | 0 | |
| created | | datetime | YES | | NULL | | | media-type | Type of media in a bit array (1 = image, 2 = video, 4 = audio | tinyint | NO | | 0 | |
| comments | Number of comments | mediumint unsigned | YES | | NULL | | | created | | datetime | YES | | NULL | |
| activities | Number of activities (like, dislike, ...) | mediumint unsigned | YES | | NULL | | | comments | Number of comments | mediumint unsigned | YES | | NULL | |
| activities | Number of activities (like, dislike, ...) | mediumint unsigned | YES | | NULL | |
Indexes Indexes
------------ ------------

View file

@ -533,6 +533,17 @@ class Contact
return self::isSharing($cid, $uid, $strict); return self::isSharing($cid, $uid, $strict);
} }
/**
* Checks if the provided public contact id has got followers on this system
*
* @param integer $cid
* @return boolean
*/
public static function hasFollowers(int $cid): bool
{
return DBA::exists('account-user-view', ["`pid` = ? AND `uid` != ? AND `rel` IN (?, ?)", $cid, 0, self::SHARING, self::FRIEND]);
}
/** /**
* Get the basepath for a given contact link * Get the basepath for a given contact link
* *

View file

@ -26,6 +26,7 @@ use Friendica\Core\Protocol;
use Friendica\Database\Database; use Friendica\Database\Database;
use Friendica\Database\DBA; use Friendica\Database\DBA;
use Friendica\DI; use Friendica\DI;
use Friendica\Model\Contact;
use Friendica\Model\Item; use Friendica\Model\Item;
use Friendica\Model\Post; use Friendica\Model\Post;
use Friendica\Model\Verb; use Friendica\Model\Verb;
@ -49,11 +50,6 @@ class Engagement
return; return;
} }
if ($item['gravity'] == Item::GRAVITY_PARENT) {
Logger::debug('Parent posts are not stored', ['uri-id' => $item['uri-id'], 'parent-uri-id' => $item['parent-uri-id']]);
return;
}
if (($item['uid'] != 0) && ($item['gravity'] == Item::GRAVITY_COMMENT)) { if (($item['uid'] != 0) && ($item['gravity'] == Item::GRAVITY_COMMENT)) {
Logger::debug('Non public comments are not stored', ['uri-id' => $item['uri-id'], 'parent-uri-id' => $item['parent-uri-id'], 'uid' => $item['uid']]); Logger::debug('Non public comments are not stored', ['uri-id' => $item['uri-id'], 'parent-uri-id' => $item['parent-uri-id'], 'uid' => $item['uid']]);
return; return;
@ -75,10 +71,23 @@ class Engagement
return; return;
} }
$store = ($item['gravity'] != Item::GRAVITY_PARENT);
if (!$store) {
$store = Contact::hasFollowers($parent['owner-id']);
}
$mediatype = self::getMediaType($item['parent-uri-id']);
if (!$store) {
$mediatype = !empty($mediatype);
}
$engagement = [ $engagement = [
'uri-id' => $item['parent-uri-id'], 'uri-id' => $item['parent-uri-id'],
'owner-id' => $parent['owner-id'], 'owner-id' => $parent['owner-id'],
'contact-type' => $parent['contact-contact-type'], 'contact-type' => $parent['contact-contact-type'],
'media-type' => $mediatype,
'created' => $parent['created'], 'created' => $parent['created'],
'comments' => DBA::count('post', ['parent-uri-id' => $item['parent-uri-id'], 'gravity' => Item::GRAVITY_COMMENT]), 'comments' => DBA::count('post', ['parent-uri-id' => $item['parent-uri-id'], 'gravity' => Item::GRAVITY_COMMENT]),
'activities' => DBA::count('post', [ 'activities' => DBA::count('post', [
@ -87,14 +96,30 @@ class Engagement
Verb::getID(Activity::FOLLOW), Verb::getID(Activity::VIEW), Verb::getID(Activity::READ) Verb::getID(Activity::FOLLOW), Verb::getID(Activity::VIEW), Verb::getID(Activity::READ)
]) ])
]; ];
if (($engagement['comments'] == 0) && ($engagement['activities'] == 0)) { if (!$store && ($engagement['comments'] == 0) && ($engagement['activities'] == 0)) {
Logger::debug('No comments nor activities. Engagement not stored', ['fields' => $engagement]); Logger::debug('No media, follower, comments or activities. Engagement not stored', ['fields' => $engagement]);
return; return;
} }
$ret = DBA::insert('post-engagement', $engagement, Database::INSERT_UPDATE); $ret = DBA::insert('post-engagement', $engagement, Database::INSERT_UPDATE);
Logger::debug('Engagement stored', ['fields' => $engagement, 'ret' => $ret]); Logger::debug('Engagement stored', ['fields' => $engagement, 'ret' => $ret]);
} }
private static function getMediaType(int $uri_id) : int
{
$media = Post\Media::getByURIId($uri_id);
$type = 0;
foreach ($media as $entry) {
if ($entry['type'] == Post\Media::IMAGE) {
$type = $type | 1;
} elseif ($entry['type'] == Post\Media::VIDEO) {
$type = $type | 2;
} elseif ($entry['type'] == Post\Media::AUDIO) {
$type = $type | 4;
}
}
return $type;
}
/** /**
* Expire old engagement data * Expire old engagement data
* *

View file

@ -45,6 +45,9 @@ class Channel extends BaseModule
const WHATSHOT = 'whatshot'; const WHATSHOT = 'whatshot';
const FORYOU = 'foryou'; const FORYOU = 'foryou';
const FOLLOWERS = 'followers'; const FOLLOWERS = 'followers';
const IMAGE = 'image';
const VIDEO = 'video';
const AUDIO = 'audio';
/** /**
* @} * @}
*/ */
@ -106,6 +109,33 @@ class Channel extends BaseModule
'accesskey' => 'h' 'accesskey' => 'h'
]; ];
$tabs[] = [
'label' => DI::l10n()->t('Images'),
'url' => 'channel/' . self::IMAGE,
'sel' => self::$content == self::IMAGE ? 'active' : '',
'title' => DI::l10n()->t('Posts with images'),
'id' => 'channel-image-tab',
'accesskey' => 'i'
];
$tabs[] = [
'label' => DI::l10n()->t('Videos'),
'url' => 'channel/' . self::VIDEO,
'sel' => self::$content == self::VIDEO ? 'active' : '',
'title' => DI::l10n()->t('Posts with videos'),
'id' => 'channel-video-tab',
'accesskey' => 'v'
];
$tabs[] = [
'label' => DI::l10n()->t('Audio'),
'url' => 'channel/' . self::AUDIO,
'sel' => self::$content == self::AUDIO ? 'active' : '',
'title' => DI::l10n()->t('Posts with audio'),
'id' => 'channel-audio-tab',
'accesskey' => 'a'
];
$tab_tpl = Renderer::getMarkupTemplate('common_tabs.tpl'); $tab_tpl = Renderer::getMarkupTemplate('common_tabs.tpl');
$o .= Renderer::replaceMacros($tab_tpl, ['$tabs' => $tabs]); $o .= Renderer::replaceMacros($tab_tpl, ['$tabs' => $tabs]);
@ -113,7 +143,7 @@ class Channel extends BaseModule
DI::page()['aside'] .= Widget::accountTypes('channel/' . self::$content, self::$accountTypeString); DI::page()['aside'] .= Widget::accountTypes('channel/' . self::$content, self::$accountTypeString);
if ((self::$content != self::FOLLOWERS) && DI::config()->get('system', 'community_no_sharer')) { if (!in_array(self::$content, [self::FOLLOWERS, self::FORYOU]) && DI::config()->get('system', 'community_no_sharer')) {
$path = self::$content; $path = self::$content;
if (!empty($this->parameters['accounttype'])) { if (!empty($this->parameters['accounttype'])) {
$path .= '/' . $this->parameters['accounttype']; $path .= '/' . $this->parameters['accounttype'];
@ -193,7 +223,7 @@ class Channel extends BaseModule
self::$content = self::FORYOU; self::$content = self::FORYOU;
} }
if (!in_array(self::$content, [self::WHATSHOT, self::FORYOU, self::FOLLOWERS])) { if (!in_array(self::$content, [self::WHATSHOT, self::FORYOU, self::FOLLOWERS, self::IMAGE, self::VIDEO, self::AUDIO])) {
throw new HTTPException\BadRequestException(DI::l10n()->t('Channel not available.')); throw new HTTPException\BadRequestException(DI::l10n()->t('Channel not available.'));
} }
@ -252,6 +282,12 @@ class Channel extends BaseModule
DI::userSession()->getLocalUserId(), Contact::FRIEND, Contact::SHARING]; DI::userSession()->getLocalUserId(), Contact::FRIEND, Contact::SHARING];
} elseif (self::$content == self::FOLLOWERS) { } elseif (self::$content == self::FOLLOWERS) {
$condition = ["`owner-id` IN (SELECT `pid` FROM `account-user-view` WHERE `uid` = ? AND `rel` = ?)", DI::userSession()->getLocalUserId(), Contact::FOLLOWER]; $condition = ["`owner-id` IN (SELECT `pid` FROM `account-user-view` WHERE `uid` = ? AND `rel` = ?)", DI::userSession()->getLocalUserId(), Contact::FOLLOWER];
} elseif (self::$content == self::IMAGE) {
$condition = ["`media-type` & ?", 1];
} elseif (self::$content == self::VIDEO) {
$condition = ["`media-type` & ?", 2];
} elseif (self::$content == self::AUDIO) {
$condition = ["`media-type` & ?", 4];
} }
if ((self::$content != self::WHATSHOT) && !is_null(self::$accountType)) { if ((self::$content != self::WHATSHOT) && !is_null(self::$accountType)) {
@ -309,7 +345,7 @@ class Channel extends BaseModule
} }
$limit = DBA::count('post-engagement', ["`contact-type` != ? AND `comments` > ?", Contact::TYPE_COMMUNITY, 0]) / $divider; $limit = DBA::count('post-engagement', ["`contact-type` != ? AND `comments` > ?", Contact::TYPE_COMMUNITY, 0]) / $divider;
$post = DBA::selectToArray('post-engagement', ['comments'], ["`contact-type` != ?", Contact::TYPE_COMMUNITY, 0], ['order' => ['comments' => true], 'limit' => [$limit, 1]]); $post = DBA::selectToArray('post-engagement', ['comments'], ["`contact-type` != ?", Contact::TYPE_COMMUNITY], ['order' => ['comments' => true], 'limit' => [$limit, 1]]);
$comments = $post[0]['comments'] ?? 0; $comments = $post[0]['comments'] ?? 0;
if (empty($comments)) { if (empty($comments)) {
return 0; return 0;
@ -328,7 +364,7 @@ class Channel extends BaseModule
} }
$limit = DBA::count('post-engagement', ["`contact-type` != ? AND `activities` > ?", Contact::TYPE_COMMUNITY, 0]) / $divider; $limit = DBA::count('post-engagement', ["`contact-type` != ? AND `activities` > ?", Contact::TYPE_COMMUNITY, 0]) / $divider;
$post = DBA::selectToArray('post-engagement', ['activities'], ["`contact-type` != ?", Contact::TYPE_COMMUNITY, 0], ['order' => ['activities' => true], 'limit' => [$limit, 1]]); $post = DBA::selectToArray('post-engagement', ['activities'], ["`contact-type` != ?", Contact::TYPE_COMMUNITY], ['order' => ['activities' => true], 'limit' => [$limit, 1]]);
$activities = $post[0]['activities'] ?? 0; $activities = $post[0]['activities'] ?? 0;
if (empty($activities)) { if (empty($activities)) {
return 0; return 0;

View file

@ -1329,6 +1329,7 @@ return [
"uri-id" => ["type" => "int unsigned", "not null" => "1", "primary" => "1", "foreign" => ["item-uri" => "id"], "comment" => "Id of the item-uri table entry that contains the item uri"], "uri-id" => ["type" => "int unsigned", "not null" => "1", "primary" => "1", "foreign" => ["item-uri" => "id"], "comment" => "Id of the item-uri table entry that contains the item uri"],
"owner-id" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "foreign" => ["contact" => "id", "on delete" => "restrict"], "comment" => "Item owner"], "owner-id" => ["type" => "int unsigned", "not null" => "1", "default" => "0", "foreign" => ["contact" => "id", "on delete" => "restrict"], "comment" => "Item owner"],
"contact-type" => ["type" => "tinyint", "not null" => "1", "default" => "0", "comment" => "Person, organisation, news, community, relay"], "contact-type" => ["type" => "tinyint", "not null" => "1", "default" => "0", "comment" => "Person, organisation, news, community, relay"],
"media-type" => ["type" => "tinyint", "not null" => "1", "default" => "0", "comment" => "Type of media in a bit array (1 = image, 2 = video, 4 = audio"],
"created" => ["type" => "datetime", "comment" => ""], "created" => ["type" => "datetime", "comment" => ""],
"comments" => ["type" => "mediumint unsigned", "comment" => "Number of comments"], "comments" => ["type" => "mediumint unsigned", "comment" => "Number of comments"],
"activities" => ["type" => "mediumint unsigned", "comment" => "Number of activities (like, dislike, ...)"], "activities" => ["type" => "mediumint unsigned", "comment" => "Number of activities (like, dislike, ...)"],

View file

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: 2023.09-dev\n" "Project-Id-Version: 2023.09-dev\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-09-02 05:34+0000\n" "POT-Creation-Date: 2023-09-02 15:51+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -793,7 +793,7 @@ msgid "All contacts"
msgstr "" msgstr ""
#: src/BaseModule.php:433 src/Content/Widget.php:239 src/Core/ACL.php:195 #: src/BaseModule.php:433 src/Content/Widget.php:239 src/Core/ACL.php:195
#: src/Module/Contact.php:415 src/Module/Conversation/Channel.php:91 #: src/Module/Contact.php:415 src/Module/Conversation/Channel.php:95
#: src/Module/PermissionTooltip.php:127 src/Module/PermissionTooltip.php:149 #: src/Module/PermissionTooltip.php:127 src/Module/PermissionTooltip.php:149
msgid "Followers" msgid "Followers"
msgstr "" msgstr ""
@ -1669,31 +1669,31 @@ msgstr ""
msgid "Follow Thread" msgid "Follow Thread"
msgstr "" msgstr ""
#: src/Content/Item.php:429 src/Model/Contact.php:1216 #: src/Content/Item.php:429 src/Model/Contact.php:1221
msgid "View Status" msgid "View Status"
msgstr "" msgstr ""
#: src/Content/Item.php:430 src/Content/Item.php:451 src/Model/Contact.php:1165 #: src/Content/Item.php:430 src/Content/Item.php:451 src/Model/Contact.php:1170
#: src/Model/Contact.php:1208 src/Model/Contact.php:1217 #: src/Model/Contact.php:1213 src/Model/Contact.php:1222
#: src/Module/Directory.php:157 src/Module/Settings/Profile/Index.php:259 #: src/Module/Directory.php:157 src/Module/Settings/Profile/Index.php:259
msgid "View Profile" msgid "View Profile"
msgstr "" msgstr ""
#: src/Content/Item.php:431 src/Model/Contact.php:1218 #: src/Content/Item.php:431 src/Model/Contact.php:1223
msgid "View Photos" msgid "View Photos"
msgstr "" msgstr ""
#: src/Content/Item.php:432 src/Model/Contact.php:1209 #: src/Content/Item.php:432 src/Model/Contact.php:1214
#: src/Model/Contact.php:1219 #: src/Model/Contact.php:1224
msgid "Network Posts" msgid "Network Posts"
msgstr "" msgstr ""
#: src/Content/Item.php:433 src/Model/Contact.php:1210 #: src/Content/Item.php:433 src/Model/Contact.php:1215
#: src/Model/Contact.php:1220 #: src/Model/Contact.php:1225
msgid "View Contact" msgid "View Contact"
msgstr "" msgstr ""
#: src/Content/Item.php:434 src/Model/Contact.php:1221 #: src/Content/Item.php:434 src/Model/Contact.php:1226
msgid "Send PM" msgid "Send PM"
msgstr "" msgstr ""
@ -1728,7 +1728,7 @@ msgid "Languages"
msgstr "" msgstr ""
#: src/Content/Item.php:448 src/Content/Widget.php:80 #: src/Content/Item.php:448 src/Content/Widget.php:80
#: src/Model/Contact.php:1211 src/Model/Contact.php:1222 #: src/Model/Contact.php:1216 src/Model/Contact.php:1227
#: src/Module/Contact/Follow.php:167 view/theme/vier/theme.php:195 #: src/Module/Contact/Follow.php:167 view/theme/vier/theme.php:195
msgid "Connect/Follow" msgid "Connect/Follow"
msgstr "" msgstr ""
@ -2243,7 +2243,7 @@ msgstr ""
msgid "Organisations" msgid "Organisations"
msgstr "" msgstr ""
#: src/Content/Widget.php:536 src/Model/Contact.php:1687 #: src/Content/Widget.php:536 src/Model/Contact.php:1692
msgid "News" msgid "News"
msgstr "" msgstr ""
@ -2324,8 +2324,8 @@ msgstr ""
msgid "Network:" msgid "Network:"
msgstr "" msgstr ""
#: src/Content/Widget/VCard.php:118 src/Model/Contact.php:1212 #: src/Content/Widget/VCard.php:118 src/Model/Contact.php:1217
#: src/Model/Contact.php:1223 src/Model/Profile.php:463 #: src/Model/Contact.php:1228 src/Model/Profile.php:463
#: src/Module/Contact/Profile.php:450 #: src/Module/Contact/Profile.php:450
msgid "Unfollow" msgid "Unfollow"
msgstr "" msgstr ""
@ -3078,82 +3078,82 @@ msgstr ""
msgid "Edit circles" msgid "Edit circles"
msgstr "" msgstr ""
#: src/Model/Contact.php:1229 src/Module/Moderation/Users/Pending.php:102 #: src/Model/Contact.php:1234 src/Module/Moderation/Users/Pending.php:102
#: src/Module/Notifications/Introductions.php:132 #: src/Module/Notifications/Introductions.php:132
#: src/Module/Notifications/Introductions.php:204 #: src/Module/Notifications/Introductions.php:204
msgid "Approve" msgid "Approve"
msgstr "" msgstr ""
#: src/Model/Contact.php:1683 #: src/Model/Contact.php:1688
msgid "Organisation" msgid "Organisation"
msgstr "" msgstr ""
#: src/Model/Contact.php:1691 #: src/Model/Contact.php:1696
msgid "Group" msgid "Group"
msgstr "" msgstr ""
#: src/Model/Contact.php:2994 #: src/Model/Contact.php:2999
msgid "Disallowed profile URL." msgid "Disallowed profile URL."
msgstr "" msgstr ""
#: src/Model/Contact.php:2999 src/Module/Friendica.php:101 #: src/Model/Contact.php:3004 src/Module/Friendica.php:101
msgid "Blocked domain" msgid "Blocked domain"
msgstr "" msgstr ""
#: src/Model/Contact.php:3004 #: src/Model/Contact.php:3009
msgid "Connect URL missing." msgid "Connect URL missing."
msgstr "" msgstr ""
#: src/Model/Contact.php:3013 #: src/Model/Contact.php:3018
msgid "" msgid ""
"The contact could not be added. Please check the relevant network " "The contact could not be added. Please check the relevant network "
"credentials in your Settings -> Social Networks page." "credentials in your Settings -> Social Networks page."
msgstr "" msgstr ""
#: src/Model/Contact.php:3031 #: src/Model/Contact.php:3036
#, php-format #, php-format
msgid "Expected network %s does not match actual network %s" msgid "Expected network %s does not match actual network %s"
msgstr "" msgstr ""
#: src/Model/Contact.php:3048 #: src/Model/Contact.php:3053
msgid "The profile address specified does not provide adequate information." msgid "The profile address specified does not provide adequate information."
msgstr "" msgstr ""
#: src/Model/Contact.php:3050 #: src/Model/Contact.php:3055
msgid "No compatible communication protocols or feeds were discovered." msgid "No compatible communication protocols or feeds were discovered."
msgstr "" msgstr ""
#: src/Model/Contact.php:3053 #: src/Model/Contact.php:3058
msgid "An author or name was not found." msgid "An author or name was not found."
msgstr "" msgstr ""
#: src/Model/Contact.php:3056 #: src/Model/Contact.php:3061
msgid "No browser URL could be matched to this address." msgid "No browser URL could be matched to this address."
msgstr "" msgstr ""
#: src/Model/Contact.php:3059 #: src/Model/Contact.php:3064
msgid "" msgid ""
"Unable to match @-style Identity Address with a known protocol or email " "Unable to match @-style Identity Address with a known protocol or email "
"contact." "contact."
msgstr "" msgstr ""
#: src/Model/Contact.php:3060 #: src/Model/Contact.php:3065
msgid "Use mailto: in front of address to force email check." msgid "Use mailto: in front of address to force email check."
msgstr "" msgstr ""
#: src/Model/Contact.php:3066 #: src/Model/Contact.php:3071
msgid "" msgid ""
"The profile address specified belongs to a network which has been disabled " "The profile address specified belongs to a network which has been disabled "
"on this site." "on this site."
msgstr "" msgstr ""
#: src/Model/Contact.php:3071 #: src/Model/Contact.php:3076
msgid "" msgid ""
"Limited profile. This person will be unable to receive direct/personal " "Limited profile. This person will be unable to receive direct/personal "
"notifications from you." "notifications from you."
msgstr "" msgstr ""
#: src/Model/Contact.php:3137 #: src/Model/Contact.php:3142
msgid "Unable to retrieve contact information." msgid "Unable to retrieve contact information."
msgstr "" msgstr ""
@ -6526,48 +6526,72 @@ msgstr ""
msgid "Unable to unfollow this contact, please contact your administrator" msgid "Unable to unfollow this contact, please contact your administrator"
msgstr "" msgstr ""
#: src/Module/Conversation/Channel.php:82 #: src/Module/Conversation/Channel.php:86
msgid "For you" msgid "For you"
msgstr "" msgstr ""
#: src/Module/Conversation/Channel.php:85 #: src/Module/Conversation/Channel.php:89
msgid "Posts from contacts you interact with and who interact with you" msgid "Posts from contacts you interact with and who interact with you"
msgstr "" msgstr ""
#: src/Module/Conversation/Channel.php:94 #: src/Module/Conversation/Channel.php:98
msgid "Posts from your followers that you don't follow" msgid "Posts from your followers that you don't follow"
msgstr "" msgstr ""
#: src/Module/Conversation/Channel.php:100 #: src/Module/Conversation/Channel.php:104
msgid "Whats Hot" msgid "Whats Hot"
msgstr "" msgstr ""
#: src/Module/Conversation/Channel.php:103 #: src/Module/Conversation/Channel.php:107
msgid "Posts with a lot of interactions" msgid "Posts with a lot of interactions"
msgstr "" msgstr ""
#: src/Module/Conversation/Channel.php:135 #: src/Module/Conversation/Channel.php:113
msgid "Images"
msgstr ""
#: src/Module/Conversation/Channel.php:116
msgid "Posts with images"
msgstr ""
#: src/Module/Conversation/Channel.php:122
msgid "Videos"
msgstr ""
#: src/Module/Conversation/Channel.php:125
msgid "Posts with videos"
msgstr ""
#: src/Module/Conversation/Channel.php:131
msgid "Audio"
msgstr ""
#: src/Module/Conversation/Channel.php:134
msgid "Posts with audio"
msgstr ""
#: src/Module/Conversation/Channel.php:166
#: src/Module/Conversation/Community.php:134 #: src/Module/Conversation/Community.php:134
msgid "Own Contacts" msgid "Own Contacts"
msgstr "" msgstr ""
#: src/Module/Conversation/Channel.php:139 #: src/Module/Conversation/Channel.php:170
#: src/Module/Conversation/Community.php:138 #: src/Module/Conversation/Community.php:138
msgid "Include" msgid "Include"
msgstr "" msgstr ""
#: src/Module/Conversation/Channel.php:140 #: src/Module/Conversation/Channel.php:171
#: src/Module/Conversation/Community.php:139 #: src/Module/Conversation/Community.php:139
msgid "Hide" msgid "Hide"
msgstr "" msgstr ""
#: src/Module/Conversation/Channel.php:156 #: src/Module/Conversation/Channel.php:187
#: src/Module/Conversation/Community.php:157 src/Module/Search/Index.php:152 #: src/Module/Conversation/Community.php:157 src/Module/Search/Index.php:152
#: src/Module/Search/Index.php:194 #: src/Module/Search/Index.php:194
msgid "No results." msgid "No results."
msgstr "" msgstr ""
#: src/Module/Conversation/Channel.php:196 #: src/Module/Conversation/Channel.php:227
msgid "Channel not available." msgid "Channel not available."
msgstr "" msgstr ""