Avoid loops at deletion / decoupling for relay posts
This commit is contained in:
parent
08e9b2cc12
commit
a27274b3b4
|
@ -24,6 +24,7 @@ namespace Friendica\Protocol\ActivityPub;
|
||||||
use Friendica\Content\Text\BBCode;
|
use Friendica\Content\Text\BBCode;
|
||||||
use Friendica\Content\Text\HTML;
|
use Friendica\Content\Text\HTML;
|
||||||
use Friendica\Content\Text\Markdown;
|
use Friendica\Content\Text\Markdown;
|
||||||
|
use Friendica\Core\Cache\Enum\Duration;
|
||||||
use Friendica\Core\Logger;
|
use Friendica\Core\Logger;
|
||||||
use Friendica\Core\Protocol;
|
use Friendica\Core\Protocol;
|
||||||
use Friendica\Core\System;
|
use Friendica\Core\System;
|
||||||
|
@ -56,6 +57,7 @@ use Friendica\Worker\Delivery;
|
||||||
*/
|
*/
|
||||||
class Processor
|
class Processor
|
||||||
{
|
{
|
||||||
|
const CACHEKEY_FETCH_ACTIVITY = 'processor:fetchMissingActivity:';
|
||||||
/**
|
/**
|
||||||
* Extracts the tag character (#, @, !) from mention links
|
* Extracts the tag character (#, @, !) from mention links
|
||||||
*
|
*
|
||||||
|
@ -1218,15 +1220,23 @@ class Processor
|
||||||
$uid = 0;
|
$uid = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
$object = ActivityPub::fetchContent($url, $uid);
|
$cachekey = self::CACHEKEY_FETCH_ACTIVITY . $url;
|
||||||
if (empty($object)) {
|
$object = DI::cache()->get($cachekey);
|
||||||
Logger::notice('Activity was not fetchable, aborting.', ['url' => $url, 'uid' => $uid]);
|
|
||||||
return '';
|
|
||||||
}
|
|
||||||
|
|
||||||
if (empty($object['id'])) {
|
if (is_null($object)) {
|
||||||
Logger::notice('Activity has got not id, aborting. ', ['url' => $url, 'object' => $object]);
|
$object = ActivityPub::fetchContent($url, $uid);
|
||||||
return '';
|
if (empty($object)) {
|
||||||
|
Logger::notice('Activity was not fetchable, aborting.', ['url' => $url, 'uid' => $uid]);
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (empty($object['id'])) {
|
||||||
|
Logger::notice('Activity has got not id, aborting. ', ['url' => $url, 'object' => $object]);
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
DI::cache()->set($cachekey, $object, Duration::FIVE_MINUTES);
|
||||||
|
} else {
|
||||||
|
Logger::debug('Fetch from cache', ['url' => $url]);
|
||||||
}
|
}
|
||||||
|
|
||||||
$signer = [];
|
$signer = [];
|
||||||
|
|
|
@ -126,14 +126,6 @@ class Queue
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$children = DBA::select('inbox-entry', ['id'], ['in-reply-to-id' => $entry['object-id']]);
|
|
||||||
while ($child = DBA::fetch($children)) {
|
|
||||||
if ($id == $child['id']) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
self::deleteById($child['id']);
|
|
||||||
}
|
|
||||||
DBA::close($children);
|
|
||||||
DBA::delete('inbox-entry', ['id' => $entry['id']]);
|
DBA::delete('inbox-entry', ['id' => $entry['id']]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -208,13 +208,6 @@ class Receiver
|
||||||
Logger::notice('Relayed message had not been fetched', ['id' => $object_id, 'actor' => $actor]);
|
Logger::notice('Relayed message had not been fetched', ['id' => $object_id, 'actor' => $actor]);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$item_id = Item::searchByLink($object_id);
|
|
||||||
if ($item_id) {
|
|
||||||
Logger::info('Relayed message had been fetched and stored', ['id' => $object_id, 'item' => $item_id, 'actor' => $actor]);
|
|
||||||
} else {
|
|
||||||
Logger::notice('Relayed message had not been stored', ['id' => $object_id, 'actor' => $actor]);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -599,9 +592,10 @@ class Receiver
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($push) {
|
if (!empty($object_data['entry-id']) && ($push || ($activity['completion-mode'] == self::COMPLETION_RELAY))) {
|
||||||
// We delay by 5 seconds to allow to accumulate all receivers
|
// We delay by 5 seconds to allow to accumulate all receivers
|
||||||
$delayed = date(DateTimeFormat::MYSQL, time() + 5);
|
$delayed = date(DateTimeFormat::MYSQL, time() + 5);
|
||||||
|
Logger::debug('Initiate processing', ['id' => $object_data['entry-id'], 'uri' => $object_data['object_id']]);
|
||||||
Worker::add(['priority' => PRIORITY_HIGH, 'delayed' => $delayed], 'ProcessQueue', $object_data['entry-id']);
|
Worker::add(['priority' => PRIORITY_HIGH, 'delayed' => $delayed], 'ProcessQueue', $object_data['entry-id']);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,7 +31,6 @@ use Friendica\Database\DBA;
|
||||||
use Friendica\DI;
|
use Friendica\DI;
|
||||||
use Friendica\Model\APContact;
|
use Friendica\Model\APContact;
|
||||||
use Friendica\Model\Contact;
|
use Friendica\Model\Contact;
|
||||||
use Friendica\Model\Conversation;
|
|
||||||
use Friendica\Model\GServer;
|
use Friendica\Model\GServer;
|
||||||
use Friendica\Model\Item;
|
use Friendica\Model\Item;
|
||||||
use Friendica\Model\Photo;
|
use Friendica\Model\Photo;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user