Merge pull request #9254 from annando/show-relay

Show if a post arrived via relay
This commit is contained in:
Hypolite Petovan 2020-09-21 11:30:04 -04:00 committed by GitHub
commit 725296a6f2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 36 additions and 12 deletions

View file

@ -764,10 +764,12 @@ function conversation_fetch_comments($thread_items, $pinned) {
case Item::PT_GLOBAL: case Item::PT_GLOBAL:
$row['direction'] = ['direction' => 9, 'title' => DI::l10n()->t('Global')]; $row['direction'] = ['direction' => 9, 'title' => DI::l10n()->t('Global')];
break; break;
default: case Item::PT_RELAY:
if ($row['uid'] == 0) { $row['direction'] = ['direction' => 10, 'title' => DI::l10n()->t('Relay')];
$row['direction'] = ['direction' => 9, 'title' => DI::l10n()->t('Global')]; break;
} case Item::PT_FETCHED:
$row['direction'] = ['direction' => 2, 'title' => DI::l10n()->t('Fetched')];
break;
} }
if (($row['gravity'] == GRAVITY_PARENT) && !$row['origin'] && ($row['author-id'] == $row['owner-id']) && if (($row['gravity'] == GRAVITY_PARENT) && !$row['origin'] && ($row['author-id'] == $row['owner-id']) &&

View file

@ -67,6 +67,8 @@ class Item
const PT_COMMENT = 71; const PT_COMMENT = 71;
const PT_STORED = 72; const PT_STORED = 72;
const PT_GLOBAL = 73; const PT_GLOBAL = 73;
const PT_RELAY = 74;
const PT_FETCHED = 75;
const PT_PERSONAL_NOTE = 128; const PT_PERSONAL_NOTE = 128;
// Field list that is used to display the items // Field list that is used to display the items

View file

@ -521,6 +521,14 @@ class Processor
$item['post-type'] = Item::PT_ARTICLE; $item['post-type'] = Item::PT_ARTICLE;
} }
if (in_array($item['post-type'], [Item::PT_COMMENT, Item::PT_GLOBAL, Item::PT_ARTICLE])) {
if (!empty($activity['from-relay'])) {
$item['post-type'] = Item::PT_RELAY;
} elseif (!empty($activity['thread-completion'])) {
$item['post-type'] = Item::PT_FETCHED;
}
}
if ($item['isForum'] ?? false) { if ($item['isForum'] ?? false) {
$item['contact-id'] = Contact::getIdForURL($activity['actor'], $receiver); $item['contact-id'] = Contact::getIdForURL($activity['actor'], $receiver);
} else { } else {
@ -690,10 +698,11 @@ class Processor
* *
* @param string $url message URL * @param string $url message URL
* @param array $child activity array with the child of this message * @param array $child activity array with the child of this message
* @param string $actor Relay actor
* @return string fetched message URL * @return string fetched message URL
* @throws \Friendica\Network\HTTPException\InternalServerErrorException * @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/ */
public static function fetchMissingActivity(string $url, array $child = []) public static function fetchMissingActivity(string $url, array $child = [], string $actor = '')
{ {
if (!empty($child['receiver'])) { if (!empty($child['receiver'])) {
$uid = ActivityPub\Receiver::getFirstUserFromReceivers($child['receiver']); $uid = ActivityPub\Receiver::getFirstUserFromReceivers($child['receiver']);
@ -752,6 +761,7 @@ class Processor
$ldactivity = JsonLD::compact($activity); $ldactivity = JsonLD::compact($activity);
$ldactivity['thread-completion'] = true; $ldactivity['thread-completion'] = true;
$ldactivity['from-relay'] = !empty($actor);
ActivityPub\Receiver::processActivity($ldactivity, json_encode($activity), $uid, true, false, $signer); ActivityPub\Receiver::processActivity($ldactivity, json_encode($activity), $uid, true, false, $signer);

View file

@ -100,7 +100,7 @@ class Receiver
$apcontact = APContact::getByURL($actor); $apcontact = APContact::getByURL($actor);
if (!empty($apcontact) && ($apcontact['type'] == 'Application') && ($apcontact['nick'] == 'relay')) { if (!empty($apcontact) && ($apcontact['type'] == 'Application') && ($apcontact['nick'] == 'relay')) {
self::processRelayPost($ldactivity); self::processRelayPost($ldactivity, $actor);
return; return;
} }
@ -151,9 +151,10 @@ class Receiver
* Process incoming posts from relays * Process incoming posts from relays
* *
* @param array $activity * @param array $activity
* @param string $actor
* @return void * @return void
*/ */
private static function processRelayPost(array $activity) private static function processRelayPost(array $activity, string $actor)
{ {
$type = JsonLD::fetchElement($activity, '@type'); $type = JsonLD::fetchElement($activity, '@type');
if (!$type) { if (!$type) {
@ -180,7 +181,7 @@ class Receiver
return; return;
} }
Processor::fetchMissingActivity($object_id); Processor::fetchMissingActivity($object_id, [], $actor);
$item_id = Item::searchByLink($object_id); $item_id = Item::searchByLink($object_id);
if ($item_id) { if ($item_id) {
@ -468,6 +469,11 @@ class Receiver
$object_data['thread-completion'] = $activity['thread-completion']; $object_data['thread-completion'] = $activity['thread-completion'];
} }
// Internal flag for posts that arrived via relay
if (!empty($activity['from-relay'])) {
$object_data['from-relay'] = $activity['from-relay'];
}
switch ($type) { switch ($type) {
case 'as:Create': case 'as:Create':
if (in_array($object_data['object_type'], self::CONTENT_TYPES)) { if (in_array($object_data['object_type'], self::CONTENT_TYPES)) {

View file

@ -19,6 +19,8 @@
<i class="fa fa-share" aria-hidden="true" title="{{$direction.title}}"></i> <i class="fa fa-share" aria-hidden="true" title="{{$direction.title}}"></i>
{{elseif $direction.direction == 9}} {{elseif $direction.direction == 9}}
<i class="fa fa-globe" aria-hidden="true" title="{{$direction.title}}"></i> <i class="fa fa-globe" aria-hidden="true" title="{{$direction.title}}"></i>
{{elseif $direction.direction == 10}}
<i class="fa fa-inbox" aria-hidden="true" title="{{$direction.title}}"></i>
{{/if}} {{/if}}
</span> </span>
{{/if}} {{/if}}

View file

@ -19,6 +19,8 @@
<i class="icon-share" aria-hidden="true" title="{{$direction.title}}"></i> <i class="icon-share" aria-hidden="true" title="{{$direction.title}}"></i>
{{elseif $direction.direction == 9}} {{elseif $direction.direction == 9}}
<i class="icon-globe" aria-hidden="true" title="{{$direction.title}}"></i> <i class="icon-globe" aria-hidden="true" title="{{$direction.title}}"></i>
{{elseif $direction.direction == 10}}
<i class="icon-inbox" aria-hidden="true" title="{{$direction.title}}"></i>
{{/if}} {{/if}}
</span> </span>
{{/if}} {{/if}}