aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorMarcel Klehr <mklehr@gmx.net>2025-01-24 10:12:56 +0100
committerAndy Scherzinger <info@andy-scherzinger.de>2025-01-27 21:13:16 +0100
commitc79179e22f84e4e0d18f063aac01c2c83fdf87bc (patch)
tree204f8c449f818256af71eb3556b44418bbc7dde1 /lib
parent5b444112564c386f4bf30dede0e3a4253b68d7ec (diff)
downloadnextcloud-server-c79179e22f84e4e0d18f063aac01c2c83fdf87bc.tar.gz
nextcloud-server-c79179e22f84e4e0d18f063aac01c2c83fdf87bc.zip
fix(TaskProcessing): Cache providersById in getPreferredProviders
Signed-off-by: Marcel Klehr <mklehr@gmx.net> [skip ci]
Diffstat (limited to 'lib')
-rw-r--r--lib/private/TaskProcessing/Manager.php11
1 files changed, 8 insertions, 3 deletions
diff --git a/lib/private/TaskProcessing/Manager.php b/lib/private/TaskProcessing/Manager.php
index 33142ad8390..dd72c8b176d 100644
--- a/lib/private/TaskProcessing/Manager.php
+++ b/lib/private/TaskProcessing/Manager.php
@@ -80,6 +80,7 @@ class Manager implements IManager {
private IAppData $appData;
private ?array $preferences = null;
+ private ?array $providersById = null;
private ICache $cache;
private ICache $distributedCache;
@@ -717,9 +718,13 @@ class Manager implements IManager {
$providers = $this->getProviders();
if (isset($this->preferences[$taskTypeId])) {
- $provider = current(array_values(array_filter($providers, fn ($provider) => $provider->getId() === $this->preferences[$taskTypeId])));
- if ($provider !== false) {
- return $provider;
+ $providersById = $this->providersById ?? array_reduce($providers, static function (array $carry, IProvider $provider) {
+ $carry[$provider->getId()] = $provider;
+ return $carry;
+ }, []);
+ $this->providersById = $providersById;
+ if (isset($providersById[$this->preferences[$taskTypeId]])) {
+ return $providersById[$this->preferences[$taskTypeId]];
}
}
// By default, use the first available provider