case Item::PT_RELAY:
$row['direction'] = ['direction' => 10, 'title' => DI::l10n()->t('Relay')];
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']) &&
!Contact::isSharing($row['author-id'], $row['uid'])) {
$item['post-type'] = Item::PT_ARTICLE;
}
- if (in_array($item['post-type'], [Item::PT_GLOBAL, Item::PT_ARTICLE]) && !empty($activity['from-relay'])) {
- $item['post-type'] = Item::PT_RELAY;
+ 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) {
/**
* Fetches missing posts
*
- * @param string $url message URL
- * @param array $child activity array with the child of this message
- * @param bool $relaymode Posts arrived via relay
+ * @param string $url message URL
+ * @param array $child activity array with the child of this message
+ * @param string $actor Relay actor
* @return string fetched message URL
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
- public static function fetchMissingActivity(string $url, array $child = [], bool $relaymode = false)
+ public static function fetchMissingActivity(string $url, array $child = [], string $actor = '')
{
if (!empty($child['receiver'])) {
$uid = ActivityPub\Receiver::getFirstUserFromReceivers($child['receiver']);
$ldactivity = JsonLD::compact($activity);
$ldactivity['thread-completion'] = true;
- $ldactivity['from-relay'] = $relaymode;
+ $ldactivity['from-relay'] = !empty($actor);
ActivityPub\Receiver::processActivity($ldactivity, json_encode($activity), $uid, true, false, $signer);
$apcontact = APContact::getByURL($actor);
if (!empty($apcontact) && ($apcontact['type'] == 'Application') && ($apcontact['nick'] == 'relay')) {
- self::processRelayPost($ldactivity);
+ self::processRelayPost($ldactivity, $actor);
return;
}
/**
* Process incoming posts from relays
*
- * @param array $activity
+ * @param array $activity
+ * @param string $actor
* @return void
*/
- private static function processRelayPost(array $activity)
+ private static function processRelayPost(array $activity, string $actor)
{
$type = JsonLD::fetchElement($activity, '@type');
if (!$type) {
return;
}
- Processor::fetchMissingActivity($object_id, [], true);
+ Processor::fetchMissingActivity($object_id, [], $actor);
$item_id = Item::searchByLink($object_id);
if ($item_id) {