From 264e41f6aae7d2db65dde1bb5f194aebeb66ab5e Mon Sep 17 00:00:00 2001 From: Ralf Lang Date: Mon, 8 Jun 2026 11:10:19 +0200 Subject: [PATCH 1/2] style: php-cs-fixer --- lib/Contents/Message.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Contents/Message.php b/lib/Contents/Message.php index 6957cddff..447edd9d9 100644 --- a/lib/Contents/Message.php +++ b/lib/Contents/Message.php @@ -219,7 +219,7 @@ public function showMessage() foreach ($part_info as $val) { if (isset($summary[$val])) { $tmp[$val] = ($summary[$val] instanceof Horde_Url - || $summary[$val] instanceof \Horde\Url\Url) + || $summary[$val] instanceof Horde\Url\Url) ? strval($summary[$val]->setRaw(true)) : $summary[$val]; } From e6cd0ffdbb028e405d44da7ec117ac576c02be21 Mon Sep 17 00:00:00 2001 From: Ralf Lang Date: Mon, 8 Jun 2026 11:33:01 +0200 Subject: [PATCH 2/2] refactor(imp): retire 'hashtable' IMAP cache driver, fall through to 'cache' --- lib/Imap/Cache/Wrapper.php | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/lib/Imap/Cache/Wrapper.php b/lib/Imap/Cache/Wrapper.php index 8f9e245c9..a1a2e54d8 100644 --- a/lib/Imap/Cache/Wrapper.php +++ b/lib/Imap/Cache/Wrapper.php @@ -70,19 +70,23 @@ protected function _initOb($params) switch ($this->_params['driver']) { case 'cache': + case 'hashtable': + /* The 'hashtable' driver is retired. The legacy + * Horde_Imap_Client_Cache_Backend_Hashtable bypassed + * Horde_Cache to write one entry per UID, optimized for + * Memcache 1.0's poor multi-get performance. Modern Redis + * (with MGET/pipelining) handles the sliced strategy of + * Backend_Cache equally well, and going through Horde_Cache + * gives one code path with consistent TTL/age handling. Old + * configurations that still set driver='hashtable' fall + * through here so users do not need to update their config + * during the migration period. */ $ob = new Horde_Imap_Client_Cache_Backend_Cache(array_filter([ 'cacheob' => $injector->getInstance('Horde_Cache'), 'lifetime' => ($this->_params['lifetime'] ?? null), ])); break; - case 'hashtable': - $ob = new Horde_Imap_Client_Cache_Backend_Hashtable(array_filter([ - 'hashtable' => $injector->getInstance('Horde_HashTable'), - 'lifetime' => ($this->_params['lifetime'] ?? null), - ])); - break; - case 'none': $ob = new Horde_Imap_Client_Cache_Backend_Null(); break;