From a9b3b28d001941921aa70d37fdc87c758a163a44 Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Fri, 05 Jun 2026 16:47:03 +0000
Subject: [PATCH] =Some hefty changes to FeedBlock. Transitioning to loading first page in php to save on extra requests. Got a bit to do yet, but I have to work on Northeh for a bit here.

---
 inc/managers/queue/Processor.php |   35 +++++++++++++++++------------------
 1 files changed, 17 insertions(+), 18 deletions(-)

diff --git a/inc/managers/queue/Processor.php b/inc/managers/queue/Processor.php
index e3d7011..f54fadd 100644
--- a/inc/managers/queue/Processor.php
+++ b/inc/managers/queue/Processor.php
@@ -19,35 +19,34 @@
 			return;
 		}
 
-		$ops = $this->storage->fetchRunnable();
-		if (empty($ops)) {
-			return;
-		}
-		foreach ($ops as $op) {
-			if ($op->state === 'completed') {
-				return;
+		$op = null;
+		$this->storage->withTransaction(function() use (&$op) {
+			$candidates = $this->storage->fetchRunnable();
+			foreach ($candidates as $candidate) {
+				if ($candidate->state === 'completed') continue;
+				if (!$this->dependenciesSatisfied($candidate)) continue;
+				if ($this->storage->markProcessing($candidate->id)) {
+					$op = $candidate;
+					break;
+				}
 			}
-			if (!$this->dependenciesSatisfied($op)) {
-				continue;
-			}
-			if (!$this->storage->markProcessing($op->id)) {
-				continue;
-			}
-			$this->processOne($op);
-			usleep(10000);
-		}
+		});
+
+		if (!$op) return;
+
+		$this->processOne($op);
+		usleep(10000);
 
 		$this->storage->invalidateQueueCache();
 	}
 
+
 	private function processOne(Operation $op): void
 	{
 		$progress = new Progress($op);
-
 		$executor = $this->registry->getExecutor($op->type) ?? $this->defaultExecutor;
 		$op->startedAt = current_time('mysql');
 		$op->state = 'processing';
-
 		$this->storage->saveProgress($op);
 
 		try {

--
Gitblit v1.10.0