summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--program/include/rcube_imap.php8
-rw-r--r--program/lib/imap.inc45
2 files changed, 21 insertions, 32 deletions
diff --git a/program/include/rcube_imap.php b/program/include/rcube_imap.php
index c82383402..fba30de0b 100644
--- a/program/include/rcube_imap.php
+++ b/program/include/rcube_imap.php
@@ -1035,14 +1035,6 @@ class rcube_imap
}
else
$a_messages = iil_C_Search($this->conn, $mailbox, ($charset ? "CHARSET $charset " : '') . $criteria);
-
- // clean message list (there might be some empty entries)
- if (is_array($a_messages))
- {
- foreach ($a_messages as $i => $val)
- if (empty($val))
- unset($a_messages[$i]);
- }
// update messagecount cache ?
// $a_mailbox_cache = get_cache('messagecount');
diff --git a/program/lib/imap.inc b/program/lib/imap.inc
index f6c6abe17..db94fac2b 100644
--- a/program/lib/imap.inc
+++ b/program/lib/imap.inc
@@ -898,9 +898,9 @@ function iil_C_Sort(&$conn, $mailbox, $field, $add='', $is_uid=FALSE,
return false;
}
do {
- $line = chop(iil_ReadLine($conn->fp, 1024));
+ $line = chop(iil_ReadLine($conn->fp));
if (iil_StartsWith($line, '* SORT')) {
- $data .= ($data ? ' ' : '') . substr($line, 7);
+ $data .= substr($line, 7);
} else if (preg_match('/^[0-9 ]+$/', $line)) {
$data .= $line;
}
@@ -913,8 +913,7 @@ function iil_C_Sort(&$conn, $mailbox, $field, $add='', $is_uid=FALSE,
return false;
}
- $out = explode(' ',$data);
- return $out;
+ return preg_split('/\s+/', $data, -1, PREG_SPLIT_NO_EMPTY);
}
function iil_C_FetchHeaderIndex(&$conn, $mailbox, $message_set, $index_field='', $skip_deleted=true) {
@@ -1842,13 +1841,10 @@ function iil_C_Copy(&$conn, $messages, $from, $to) {
}
function iil_C_CountUnseen(&$conn, $folder) {
- $index = iil_C_Search($conn, $folder, 'ALL UNSEEN');
- if (is_array($index)) {
- if (($cnt = count($index)) && $index[0] != '') {
- return $cnt;
- }
- }
- return false;
+ $index = iil_C_Search($conn, $folder, 'ALL UNSEEN');
+ if (is_array($index))
+ return count($index);
+ return false;
}
function iil_C_UID2ID(&$conn, $folder, $uid) {
@@ -1862,45 +1858,46 @@ function iil_C_UID2ID(&$conn, $folder, $uid) {
}
function iil_C_ID2UID(&$conn, $folder, $id) {
- $fp = $conn->fp;
+
if ($id == 0) {
return -1;
}
$result = -1;
if (iil_C_Select($conn, $folder)) {
- $key = 'FUID';
- if (iil_PutLine($fp, "$key FETCH $id (UID)")) {
+ $key = 'fuid';
+ if (iil_PutLine($conn->fp, "$key FETCH $id (UID)")) {
do {
- $line=chop(iil_ReadLine($fp, 1024));
+ $line = chop(iil_ReadLine($conn->fp, 1024));
if (preg_match("/^\* $id FETCH \(UID (.*)\)/i", $line, $r)) {
$result = $r[1];
}
- } while (!preg_match("/^$key/", $line));
+ } while (!iil_StartsWith($line, $key, true));
}
}
return $result;
}
function iil_C_Search(&$conn, $folder, $criteria) {
- $fp = $conn->fp;
+
if (iil_C_Select($conn, $folder)) {
- $c = 0;
+ $data = '';
$query = 'srch1 SEARCH ' . chop($criteria);
- if (!iil_PutLineC($fp, $query)) {
+ if (!iil_PutLineC($conn->fp, $query)) {
return false;
}
do {
- $line=trim(iil_ReadLine($fp, 10000));
- if (preg_match('/^\* SEARCH/i', $line)) {
- $str = trim(substr($line, 8));
- $messages = explode(' ', $str);
+ $line = trim(iil_ReadLine($conn->fp));
+ if (iil_StartsWith($line, '* SEARCH')) {
+ $data .= substr($line, 8);
+ } else if (preg_match('/^[0-9 ]+$/', $line)) {
+ $data .= $line;
}
} while (!iil_StartsWith($line, 'srch1', true));
$result_code = iil_ParseResult($line);
if ($result_code == 0) {
- return $messages;
+ return preg_split('/\s+/', $data, -1, PREG_SPLIT_NO_EMPTY);
}
$conn->error = 'iil_C_Search: ' . $line . "\n";
return false;