mirror of
https://github.com/friendica/friendica
synced 2025-05-12 04:24:11 +02:00
Fix delivery counter / archive relay contacts
This commit is contained in:
parent
3ee26ecd24
commit
6af4c90dff
7 changed files with 111 additions and 31 deletions
|
@ -48,14 +48,13 @@ class APDelivery extends BaseObject
|
|||
$data = ActivityPub\Transmitter::createCachedActivityFromItem($target_id);
|
||||
if (!empty($data)) {
|
||||
$success = HTTPSignature::transmit($data, $inbox, $uid);
|
||||
if ($success && in_array($cmd, [Delivery::POST])) {
|
||||
ItemDeliveryData::incrementQueueDone($target_id, ItemDeliveryData::ACTIVITYPUB);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!$success && !Worker::defer() && in_array($cmd, [Delivery::POST])) {
|
||||
ItemDeliveryData::incrementQueueFailed($target_id);
|
||||
} elseif ($success && in_array($cmd, [Delivery::POST])) {
|
||||
ItemDeliveryData::incrementQueueDone($target_id, ItemDeliveryData::ACTIVITYPUB);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -43,12 +43,14 @@ class Delivery extends BaseObject
|
|||
if ($cmd == self::MAIL) {
|
||||
$target_item = DBA::selectFirst('mail', [], ['id' => $target_id]);
|
||||
if (!DBA::isResult($target_item)) {
|
||||
self::setFailedQueue($cmd, $target_id);
|
||||
return;
|
||||
}
|
||||
$uid = $target_item['uid'];
|
||||
} elseif ($cmd == self::SUGGESTION) {
|
||||
$target_item = DBA::selectFirst('fsuggest', [], ['id' => $target_id]);
|
||||
if (!DBA::isResult($target_item)) {
|
||||
self::setFailedQueue($cmd, $target_id);
|
||||
return;
|
||||
}
|
||||
$uid = $target_item['uid'];
|
||||
|
@ -58,6 +60,7 @@ class Delivery extends BaseObject
|
|||
} else {
|
||||
$item = Model\Item::selectFirst(['parent'], ['id' => $target_id]);
|
||||
if (!DBA::isResult($item) || empty($item['parent'])) {
|
||||
self::setFailedQueue($cmd, $target_id);
|
||||
return;
|
||||
}
|
||||
$parent_id = intval($item['parent']);
|
||||
|
@ -79,11 +82,13 @@ class Delivery extends BaseObject
|
|||
|
||||
if (empty($target_item)) {
|
||||
Logger::log('Item ' . $target_id . "wasn't found. Quitting here.");
|
||||
self::setFailedQueue($cmd, $target_id);
|
||||
return;
|
||||
}
|
||||
|
||||
if (empty($parent)) {
|
||||
Logger::log('Parent ' . $parent_id . ' for item ' . $target_id . "wasn't found. Quitting here.");
|
||||
self::setFailedQueue($cmd, $target_id);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -93,14 +98,13 @@ class Delivery extends BaseObject
|
|||
$uid = $target_item['uid'];
|
||||
} else {
|
||||
Logger::log('Only public users for item ' . $target_id, Logger::DEBUG);
|
||||
self::setFailedQueue($cmd, $target_id);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!empty($contact_id) && Model\Contact::isArchived($contact_id)) {
|
||||
Logger::info('Contact is archived', ['id' => $contact_id, 'cmd' => $cmd, 'item' => $target_item['id']]);
|
||||
if (in_array($cmd, [Delivery::POST, Delivery::POKE])) {
|
||||
Model\ItemDeliveryData::incrementQueueFailed($target_item['id']);
|
||||
}
|
||||
self::setFailedQueue($cmd, $target_id);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -160,6 +164,7 @@ class Delivery extends BaseObject
|
|||
|
||||
$owner = Model\User::getOwnerDataById($uid);
|
||||
if (!DBA::isResult($owner)) {
|
||||
self::setFailedQueue($cmd, $target_id);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -168,10 +173,12 @@ class Delivery extends BaseObject
|
|||
['id' => $contact_id, 'blocked' => false, 'pending' => false, 'self' => false]
|
||||
);
|
||||
if (!DBA::isResult($contact)) {
|
||||
self::setFailedQueue($cmd, $target_id);
|
||||
return;
|
||||
}
|
||||
|
||||
if (Network::isUrlBlocked($contact['url'])) {
|
||||
self::setFailedQueue($cmd, $target_id);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -204,6 +211,15 @@ class Delivery extends BaseObject
|
|||
return;
|
||||
}
|
||||
|
||||
private static function setFailedQueue($cmd, $id)
|
||||
{
|
||||
if (!in_array($cmd, [Delivery::POST, Delivery::POKE])) {
|
||||
return;
|
||||
}
|
||||
|
||||
Model\ItemDeliveryData::incrementQueueFailed($id);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Deliver content via DFRN
|
||||
*
|
||||
|
@ -300,6 +316,10 @@ class Delivery extends BaseObject
|
|||
// We never spool failed relay deliveries
|
||||
if ($public_dfrn) {
|
||||
Logger::log('Relay delivery to ' . $contact["url"] . ' with guid ' . $target_item["guid"] . ' returns ' . $deliver_status);
|
||||
|
||||
if (in_array($cmd, [Delivery::POST, Delivery::POKE])) {
|
||||
Model\ItemDeliveryData::incrementQueueDone($target_item['id'], $protocol);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -419,6 +439,11 @@ class Delivery extends BaseObject
|
|||
// The message could not be delivered. We mark the contact as "dead"
|
||||
Model\Contact::markForArchival($contact);
|
||||
|
||||
// When it is delivered to the public endpoint, we do mark the relay contact for archival as well
|
||||
if ($public_message) {
|
||||
Diaspora::markRelayForArchival($contact);
|
||||
}
|
||||
|
||||
if (empty($contact['contact-type']) || ($contact['contact-type'] != Model\Contact::TYPE_RELAY)) {
|
||||
Logger::info('Delivery failed: defer message', ['id' => defaults($target_item, 'guid', $target_item['id'])]);
|
||||
// defer message for redelivery
|
||||
|
|
|
@ -446,8 +446,6 @@ class Notifier
|
|||
|
||||
$conversants[] = $rr['id'];
|
||||
|
||||
$delivery_queue_count++;
|
||||
|
||||
Logger::log('Public delivery of item ' . $target_item["guid"] . ' (' . $target_id . ') to ' . json_encode($rr), Logger::DEBUG);
|
||||
|
||||
// Ensure that posts with our own protocol arrives before Diaspora posts arrive.
|
||||
|
@ -459,7 +457,10 @@ class Notifier
|
|||
} else {
|
||||
$deliver_options = ['priority' => $a->queue['priority'], 'created' => $a->queue['created'], 'dont_fork' => true];
|
||||
}
|
||||
Worker::add($deliver_options, 'Delivery', $cmd, $target_id, (int)$rr['id']);
|
||||
|
||||
if (Worker::add($deliver_options, 'Delivery', $cmd, $target_id, (int)$rr['id'])) {
|
||||
$delivery_queue_count++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -495,8 +496,6 @@ class Notifier
|
|||
continue;
|
||||
}
|
||||
|
||||
$delivery_queue_count++;
|
||||
|
||||
Logger::log('Delivery of item ' . $target_id . ' to ' . json_encode($contact), Logger::DEBUG);
|
||||
|
||||
// Ensure that posts with our own protocol arrives before Diaspora posts arrive.
|
||||
|
@ -507,7 +506,10 @@ class Notifier
|
|||
} else {
|
||||
$deliver_options = ['priority' => $a->queue['priority'], 'created' => $a->queue['created'], 'dont_fork' => true];
|
||||
}
|
||||
Worker::add($deliver_options, 'Delivery', $cmd, $target_id, (int)$contact['id']);
|
||||
|
||||
if (Worker::add($deliver_options, 'Delivery', $cmd, $target_id, (int)$contact['id'])) {
|
||||
$delivery_queue_count++;
|
||||
}
|
||||
}
|
||||
DBA::close($delivery_contacts_stmt);
|
||||
|
||||
|
@ -515,11 +517,11 @@ class Notifier
|
|||
// send salmon slaps to mentioned remote tags (@foo@example.com) in OStatus posts
|
||||
// They are especially used for notifications to OStatus users that don't follow us.
|
||||
if (!Config::get('system', 'dfrn_only') && count($url_recipients) && ($public_message || $push_notify) && !empty($target_item)) {
|
||||
$delivery_queue_count += count($url_recipients);
|
||||
$slap = OStatus::salmon($target_item, $owner);
|
||||
foreach ($url_recipients as $url) {
|
||||
Logger::log('Salmon delivery of item ' . $target_id . ' to ' . $url);
|
||||
/// @TODO Redeliver/queue these items on failure, though there is no contact record
|
||||
$delivery_queue_count++;
|
||||
Salmon::slapper($owner, $url, $slap);
|
||||
ItemDeliveryData::incrementQueueDone($target_id, ItemDeliveryData::OSTATUS);
|
||||
}
|
||||
|
@ -677,13 +679,17 @@ class Notifier
|
|||
// Fill the item cache
|
||||
ActivityPub\Transmitter::createCachedActivityFromItem($target_item['id'], true);
|
||||
|
||||
$delivery_queue_count = 0;
|
||||
|
||||
foreach ($inboxes as $inbox) {
|
||||
Logger::info('Delivery via ActivityPub', ['cmd' => $cmd, 'id' => $target_item['id'], 'inbox' => $inbox]);
|
||||
|
||||
Worker::add(['priority' => $priority, 'created' => $created, 'dont_fork' => true],
|
||||
'APDelivery', $cmd, $target_item['id'], $inbox, $uid);
|
||||
if (Worker::add(['priority' => $priority, 'created' => $created, 'dont_fork' => true],
|
||||
'APDelivery', $cmd, $target_item['id'], $inbox, $uid)) {
|
||||
$delivery_queue_count++;
|
||||
}
|
||||
}
|
||||
|
||||
return count($inboxes);
|
||||
return $delivery_queue_count;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue