From 9ae29c9525dbd878cff63d691625bb0c6f6cbf5c Mon Sep 17 00:00:00 2001
From: alecpl <alec@alec.pl>
Date: Fri, 29 Oct 2010 14:02:19 -0400
Subject: [PATCH] - Improve performance of message cache status checking when skip_disabled=true
---
program/include/rcube_imap_generic.php | 32 +++++++++++++++++++++++---------
1 files changed, 23 insertions(+), 9 deletions(-)
diff --git a/program/include/rcube_imap_generic.php b/program/include/rcube_imap_generic.php
index 5d16dc0..a7bfe05 100644
--- a/program/include/rcube_imap_generic.php
+++ b/program/include/rcube_imap_generic.php
@@ -1008,8 +1008,8 @@
}
// message IDs
- if (is_array($add))
- $add = $this->compressMessageSet(join(',', $add));
+ if (!empty($add))
+ $add = $this->compressMessageSet($add);
list($code, $response) = $this->execute($is_uid ? 'UID SORT' : 'SORT',
array("($field)", $encoding, 'ALL' . (!empty($add) ? ' '.$add : '')));
@@ -1026,7 +1026,7 @@
function fetchHeaderIndex($mailbox, $message_set, $index_field='', $skip_deleted=true, $uidfetch=false)
{
if (is_array($message_set)) {
- if (!($message_set = $this->compressMessageSet(join(',', $message_set))))
+ if (!($message_set = $this->compressMessageSet($message_set)))
return false;
} else {
list($from_idx, $to_idx) = explode(':', $message_set);
@@ -1150,12 +1150,12 @@
return $result;
}
- private function compressMessageSet($messages, $force=false)
+ static function compressMessageSet($messages, $force=false)
{
// given a comma delimited list of independent mid's,
// compresses by grouping sequences together
- if (!is_array($message_set)) {
+ if (!is_array($messages)) {
// if less than 255 bytes long, let's not bother
if (!$force && strlen($messages)<255) {
return $messages;
@@ -1197,6 +1197,23 @@
// return as comma separated string
return implode(',', $result);
+ }
+
+ static function uncompressMessageSet($messages)
+ {
+ $result = array();
+ $messages = explode(',', $messages);
+
+ foreach ($messages as $part) {
+ $items = explode(':', $part);
+ $max = max($items[0], $items[1]);
+
+ for ($x=$items[0]; $x<=$max; $x++) {
+ $result[] = $x;
+ }
+ }
+
+ return $result;
}
/**
@@ -1264,9 +1281,6 @@
if (!$this->select($mailbox)) {
return false;
}
-
- if (is_array($message_set))
- $message_set = join(',', $message_set);
$message_set = $this->compressMessageSet($message_set);
@@ -1824,7 +1838,7 @@
if (in_array('MAX', $items))
$result['MAX'] = !empty($response) ? max($response) : 0;
if (in_array('ALL', $items))
- $result['ALL'] = $this->compressMessageSet(implode(',', $response), true);
+ $result['ALL'] = $this->compressMessageSet($response, true);
return $result;
}
--
Gitblit v1.9.1