From 4c224fbddd47bb0e5d6c6b03eb68c79ae848568f Mon Sep 17 00:00:00 2001 From: Michael Date: Fri, 21 Sep 2018 12:06:36 +0000 Subject: [PATCH] Deliver everything to all receivers in the thread --- src/Protocol/ActivityPub.php | 29 ++++++++++++++++++++++------- src/Worker/Notifier.php | 20 ++++++-------------- 2 files changed, 28 insertions(+), 21 deletions(-) diff --git a/src/Protocol/ActivityPub.php b/src/Protocol/ActivityPub.php index edc3de3f3b..ad4308cbb6 100644 --- a/src/Protocol/ActivityPub.php +++ b/src/Protocol/ActivityPub.php @@ -46,13 +46,13 @@ use Friendica\Util\LDSignature; * - Object Types: Person, Tombstome * * Transmitter: - * - Activities: Like, Dislike, Update, Delete - * - Object Tyoes: Article, Announce, Person, Tombstone + * - Activities: Like, Dislike, Update, Delete, Announce + * - Object Tyoes: Article, Person, Tombstone * * General: - * - Message distribution - * - Endpoints: Outbox, Object, Follower, Following + * - Endpoints: Outbox, Follower, Following * - General cleanup + * - Queueing unsucessful deliveries */ class ActivityPub { @@ -172,13 +172,28 @@ class ActivityPub return $data; } - public static function fetchTargetInboxes($item) + public static function fetchTargetInboxes($item, $uid) { $inboxes = []; + $parents = Item::select(['author-link', 'owner-link'], ['parent' => $item['parent']]); + while ($parent = Item::fetch($parents)) { + $profile = self::fetchprofile($parent['author-link']); + if (!empty($profile)) { + $target = defaults($profile, 'sharedinbox', $profile['inbox']); + $inboxes[$target] = $target; + } + $profile = self::fetchprofile($parent['owner-link']); + if (!empty($profile)) { + $target = defaults($profile, 'sharedinbox', $profile['inbox']); + $inboxes[$target] = $target; + } + } + DBA::close($parents); + $terms = Term::tagArrayFromItemId($item['id']); if (!$item['private']) { - $contacts = DBA::select('contact', ['notify', 'batch'], ['uid' => $item['uid'], + $contacts = DBA::select('contact', ['notify', 'batch'], ['uid' => $uid, 'rel' => [Contact::FOLLOWER, Contact::FRIEND], 'network' => Protocol::ACTIVITYPUB]); while ($contact = DBA::fetch($contacts)) { $contact = defaults($contact, 'batch', $contact['notify']); @@ -205,7 +220,7 @@ class ActivityPub if ($term['type'] != TERM_MENTION) { continue; } - $cid = Contact::getIdForURL($term['url'], $item['uid']); + $cid = Contact::getIdForURL($term['url'], $uid); if (!empty($cid) && in_array($cid, $receiver_list)) { $contact = DBA::selectFirst('contact', ['url'], ['id' => $cid, 'network' => Protocol::ACTIVITYPUB]); $profile = self::fetchprofile($contact['url']); diff --git a/src/Worker/Notifier.php b/src/Worker/Notifier.php index 3e73b5b5ed..286bcd03ee 100644 --- a/src/Worker/Notifier.php +++ b/src/Worker/Notifier.php @@ -416,21 +416,13 @@ class Notifier $inboxes = []; - if ($followup) { - $profile = ActivityPub::fetchprofile($parent['author-link']); - if (!empty($profile)) { - $target = defaults($profile, 'sharedinbox', $profile['inbox']); - $inboxes[$target] = $target; - } - } else { - if ($target_item['origin']) { - $inboxes = ActivityPub::fetchTargetInboxes($target_item); - } + if ($target_item['origin']) { + $inboxes = ActivityPub::fetchTargetInboxes($target_item, $uid); + } - if ($parent['origin']) { - $parent_inboxes = ActivityPub::fetchTargetInboxes($parent); - $inboxes = array_merge($inboxes, $parent_inboxes); - } + if ($parent['origin']) { + $parent_inboxes = ActivityPub::fetchTargetInboxes($parent, $uid); + $inboxes = array_merge($inboxes, $parent_inboxes); } foreach ($inboxes as $inbox) {