diff options
author | Marcel Klehr <mklehr@gmx.net> | 2025-01-24 10:12:56 +0100 |
---|---|---|
committer | Andy Scherzinger <info@andy-scherzinger.de> | 2025-01-27 21:13:16 +0100 |
commit | c79179e22f84e4e0d18f063aac01c2c83fdf87bc (patch) | |
tree | 204f8c449f818256af71eb3556b44418bbc7dde1 /lib | |
parent | 5b444112564c386f4bf30dede0e3a4253b68d7ec (diff) | |
download | nextcloud-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.php | 11 |
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 |