aboutsummaryrefslogtreecommitdiffhomepage
path: root/Digitigrade/Job/PeriodicFetchRemoteFeed.php
diff options
context:
space:
mode:
authorwinter2025-05-04 21:04:18 +0100
committerwinter2025-05-04 21:04:18 +0100
commitd86f36e4becbe40766598816f837042aad4ce145 (patch)
treed56c1e90c8637e0bf2f8ca346493e91ed3d5ed06 /Digitigrade/Job/PeriodicFetchRemoteFeed.php
parent8b4bac25d588720f88d178cfd71fc8a8361e2ff5 (diff)
allow following actors with no follow endpoint
Diffstat (limited to 'Digitigrade/Job/PeriodicFetchRemoteFeed.php')
-rw-r--r--Digitigrade/Job/PeriodicFetchRemoteFeed.php37
1 files changed, 37 insertions, 0 deletions
diff --git a/Digitigrade/Job/PeriodicFetchRemoteFeed.php b/Digitigrade/Job/PeriodicFetchRemoteFeed.php
new file mode 100644
index 0000000..e84757f
--- /dev/null
+++ b/Digitigrade/Job/PeriodicFetchRemoteFeed.php
@@ -0,0 +1,37 @@
+<?php
+namespace Digitigrade\Job;
+
+use Digitigrade\GlobalSettings;
+use Digitigrade\Job;
+use Digitigrade\JobQueue;
+use Digitigrade\Logger;
+use Digitigrade\Model\Actor;
+
+class PeriodicFetchRemoteFeed extends Job {
+ public int $actorId;
+
+ public function __construct(Actor $targetActor) {
+ $this->actorId = $targetActor->id;
+ $this->remainingTries = 8;
+ }
+
+ public function run() {
+ $actor = Actor::find($this->actorId);
+ $logger = Logger::getInstance();
+ // only bother if someone local still follows the actor
+ if (count(array_filter($actor->findFollowers(), fn(Actor $a) => $a->isLocal)) > 0) {
+ $logger->info('Fetching feed for simple remote actor ' . $actor->getFullHandle());
+ $actor->backfill(GlobalSettings::getInstance()->get('instance.feedUpdateLimit') ?? 50);
+ $this->submit();
+ } else {
+ $logger->info('No longer fetching feed for ' . $actor->getFullHandle() . ' as nobody follows them anymore');
+ }
+ }
+
+ public function submit() {
+ JobQueue::getInstance()->submitDelayedUntil(
+ $this,
+ (new \DateTimeImmutable)->add(new \DateInterval(GlobalSettings::getInstance()->get('instance.feedUpdateInterval') ?? 'PT1H'))
+ );
+ }
+} \ No newline at end of file