Merge pull request #11789 from annando/fetchactivity
Caching for fetched activities
This commit is contained in:
commit
d693bc1b2f
|
@ -1201,6 +1201,33 @@ class Processor
|
||||||
Logger::info('Fetched featured posts', ['new' => $new, 'old' => $old, 'contact' => $url]);
|
Logger::info('Fetched featured posts', ['new' => $new, 'old' => $old, 'contact' => $url]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function fetchCachedActivity(string $url, int $uid): array
|
||||||
|
{
|
||||||
|
$cachekey = self::CACHEKEY_FETCH_ACTIVITY . $uid . ':' . $url;
|
||||||
|
$object = DI::cache()->get($cachekey);
|
||||||
|
|
||||||
|
if (!is_null($object)) {
|
||||||
|
Logger::debug('Fetch from cache', ['url' => $url, 'uid' => $uid]);
|
||||||
|
return $object;
|
||||||
|
}
|
||||||
|
|
||||||
|
$object = ActivityPub::fetchContent($url, $uid);
|
||||||
|
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);
|
||||||
|
|
||||||
|
Logger::debug('Activity was fetched successfully', ['url' => $url, 'uid' => $uid]);
|
||||||
|
|
||||||
|
return $object;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fetches missing posts
|
* Fetches missing posts
|
||||||
*
|
*
|
||||||
|
@ -1220,25 +1247,11 @@ class Processor
|
||||||
$uid = 0;
|
$uid = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
$cachekey = self::CACHEKEY_FETCH_ACTIVITY . $url;
|
$object = self::fetchCachedActivity($url, $uid);
|
||||||
$object = DI::cache()->get($cachekey);
|
|
||||||
|
|
||||||
if (is_null($object)) {
|
|
||||||
$object = ActivityPub::fetchContent($url, $uid);
|
|
||||||
if (empty($object)) {
|
if (empty($object)) {
|
||||||
Logger::notice('Activity was not fetchable, aborting.', ['url' => $url, 'uid' => $uid]);
|
|
||||||
return '';
|
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 = [];
|
||||||
|
|
||||||
if (!empty($object['attributedTo'])) {
|
if (!empty($object['attributedTo'])) {
|
||||||
|
|
|
@ -241,7 +241,7 @@ class Receiver
|
||||||
return 'as:' . $profile['type'];
|
return 'as:' . $profile['type'];
|
||||||
}
|
}
|
||||||
|
|
||||||
$data = ActivityPub::fetchContent($object_id, $uid);
|
$data = Processor::fetchCachedActivity($object_id, $uid);
|
||||||
if (!empty($data)) {
|
if (!empty($data)) {
|
||||||
$object = JsonLD::compact($data);
|
$object = JsonLD::compact($data);
|
||||||
$type = JsonLD::fetchElement($object, '@type');
|
$type = JsonLD::fetchElement($object, '@type');
|
||||||
|
@ -284,7 +284,7 @@ class Receiver
|
||||||
if (!empty($id) && !$trust_source) {
|
if (!empty($id) && !$trust_source) {
|
||||||
$fetch_uid = $uid ?: self::getBestUserForActivity($activity);
|
$fetch_uid = $uid ?: self::getBestUserForActivity($activity);
|
||||||
|
|
||||||
$fetched_activity = ActivityPub::fetchContent($fetch_id, $fetch_uid);
|
$fetched_activity = Processor::fetchCachedActivity($fetch_id, $fetch_uid);
|
||||||
if (!empty($fetched_activity)) {
|
if (!empty($fetched_activity)) {
|
||||||
$object = JsonLD::compact($fetched_activity);
|
$object = JsonLD::compact($fetched_activity);
|
||||||
|
|
||||||
|
@ -358,7 +358,7 @@ class Receiver
|
||||||
|
|
||||||
// Fetch the activity on Lemmy "Announce" messages (announces of activities)
|
// Fetch the activity on Lemmy "Announce" messages (announces of activities)
|
||||||
if (($type == 'as:Announce') && in_array($object_type, array_merge(self::ACTIVITY_TYPES, ['as:Delete', 'as:Undo', 'as:Update']))) {
|
if (($type == 'as:Announce') && in_array($object_type, array_merge(self::ACTIVITY_TYPES, ['as:Delete', 'as:Undo', 'as:Update']))) {
|
||||||
$data = ActivityPub::fetchContent($object_id, $fetch_uid);
|
$data = Processor::fetchCachedActivity($object_id, $fetch_uid);
|
||||||
if (!empty($data)) {
|
if (!empty($data)) {
|
||||||
$type = $object_type;
|
$type = $object_type;
|
||||||
$activity = JsonLD::compact($data);
|
$activity = JsonLD::compact($data);
|
||||||
|
@ -1273,7 +1273,7 @@ class Receiver
|
||||||
$type = JsonLD::fetchElement($object, '@type');
|
$type = JsonLD::fetchElement($object, '@type');
|
||||||
|
|
||||||
if (!$trust_source || empty($type)) {
|
if (!$trust_source || empty($type)) {
|
||||||
$data = ActivityPub::fetchContent($object_id, $uid);
|
$data = Processor::fetchCachedActivity($object_id, $uid);
|
||||||
if (!empty($data)) {
|
if (!empty($data)) {
|
||||||
$object = JsonLD::compact($data);
|
$object = JsonLD::compact($data);
|
||||||
Logger::info('Fetched content for ' . $object_id);
|
Logger::info('Fetched content for ' . $object_id);
|
||||||
|
|
|
@ -797,6 +797,7 @@ class OStatus
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($xml != '') {
|
if ($xml != '') {
|
||||||
|
$hub = '';
|
||||||
self::process($xml, $importer, $contact, $hub, $stored, false, Conversation::PULL);
|
self::process($xml, $importer, $contact, $hub, $stored, false, Conversation::PULL);
|
||||||
} else {
|
} else {
|
||||||
Logger::info('XML could not be fetched for URI: ' . $related_uri . ' - href: ' . $related);
|
Logger::info('XML could not be fetched for URI: ' . $related_uri . ' - href: ' . $related);
|
||||||
|
|
|
@ -508,7 +508,7 @@ class HTTPSignature
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
$actor = JsonLD::fetchElement($object, 'actor', 'id');
|
$actor = JsonLD::fetchElement($object, 'actor', 'id') ?? '';
|
||||||
} else {
|
} else {
|
||||||
$actor = '';
|
$actor = '';
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user