From e906033ceb66042525be8e94c01e66f60fe8e8f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timoth=C3=A9e=20Jaussoin?= Date: Sun, 12 Oct 2025 16:42:59 +0200 Subject: [PATCH] Put back the Scheduler --- CHANGELOG.md | 1 - app/PresenceBufferSaver.php | 11 ++++-- src/Movim/Scheduler.php | 43 ++++++++++++++++++++++ src/Moxl/Xec/Action/Avatar/SetMetadata.php | 6 +++ workers/linker.php | 4 ++ 5 files changed, 60 insertions(+), 5 deletions(-) create mode 100644 src/Movim/Scheduler.php diff --git a/CHANGELOG.md b/CHANGELOG.md index 1450a3fc6..26e17fa24 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -41,7 +41,6 @@ v0.32 (master) * Add a pusher worker that is handling all the WebPush notifications * Improve the upload progress status, detect when the file is handled by the PHP and return the XMPP progress status * Add an AvatarHandler worker that is taking care of requesting and saving the Avatar and Banner URLs and base64 avatars -* Remove the Scheduler v0.31 --------------------------- diff --git a/app/PresenceBufferSaver.php b/app/PresenceBufferSaver.php index 530501f22..70f691150 100644 --- a/app/PresenceBufferSaver.php +++ b/app/PresenceBufferSaver.php @@ -9,6 +9,7 @@ use Moxl\Xec\Action\Vcard\Get; use App\Presence; use App\Info; use App\Contact; +use Movim\Scheduler; class PresenceBufferSaver { @@ -111,10 +112,12 @@ class PresenceBufferSaver $avatarHashes->each(function ($jid, $avatarhash) { if ($jid != me()->id) { - $r = new Get; - $r->setAvatarhash($avatarhash) - ->setTo($jid) - ->request(); + Scheduler::getInstance()->append('avatar_' . $jid . '_' . $avatarhash, function () use ($jid, $avatarhash) { + $r = new Get; + $r->setAvatarhash($avatarhash) + ->setTo($jid) + ->request(); + }); } }); } diff --git a/src/Movim/Scheduler.php b/src/Movim/Scheduler.php new file mode 100644 index 000000000..cad5cf24f --- /dev/null +++ b/src/Movim/Scheduler.php @@ -0,0 +1,43 @@ +addPeriodicTimer(0.5, function () { + if (!empty($this->_stack)) { + $key = key($this->_stack); + call_user_func($this->_stack[$key]); + unset($this->_stack[$key]); + } + }); + } + + public function append(string $key, $function) + { + $this->_stack[$key] = $function; + } +} diff --git a/src/Moxl/Xec/Action/Avatar/SetMetadata.php b/src/Moxl/Xec/Action/Avatar/SetMetadata.php index 46bf0450b..9c93e3723 100644 --- a/src/Moxl/Xec/Action/Avatar/SetMetadata.php +++ b/src/Moxl/Xec/Action/Avatar/SetMetadata.php @@ -44,6 +44,12 @@ class SetMetadata extends Action public function handle(?\SimpleXMLElement $stanza = null, ?\SimpleXMLElement $parent = null) { + // And we re-request the server to refresh things just in case... + $get = new Get; + $get->setTo($this->_to) + ->setNode($this->_node) + ->request(); + $this->pack(['to' => $this->_to, 'node' => $this->_node]); $this->deliver(); } diff --git a/workers/linker.php b/workers/linker.php index e6ab276db..ef88255f7 100644 --- a/workers/linker.php +++ b/workers/linker.php @@ -11,6 +11,7 @@ use React\Promise\Timer; use App\PresenceBuffer; use Movim\Widget\Wrapper; +use Movim\Scheduler; $loop = React\EventLoop\Loop::get(); @@ -24,6 +25,9 @@ $server = $config->nameservers ? reset($config->nameservers) : '8.8.8.8'; $factory = new React\Dns\Resolver\Factory(); $dns = $factory->create($server); +// Scheduler +Scheduler::getInstance()->start(); + // TCP Connector $connector = null;