summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoralecpl <alec@alec.pl>2008-11-15 14:29:45 +0000
committeralecpl <alec@alec.pl>2008-11-15 14:29:45 +0000
commite2e745fb4ee52b11063a1654663c018084584586 (patch)
tree3ade8a7dad08cc8cd7f1eca6c90962a313ea60de
parent3d1e777b39479b7593966a2ad2db3d266c28de34 (diff)
- don't use SORT when SEARCH is better (sort field not specified)
-rw-r--r--program/include/rcube_imap.php3
-rw-r--r--program/lib/imap.inc17
2 files changed, 10 insertions, 10 deletions
diff --git a/program/include/rcube_imap.php b/program/include/rcube_imap.php
index 0eb9f7b36..3fe651de6 100644
--- a/program/include/rcube_imap.php
+++ b/program/include/rcube_imap.php
@@ -984,9 +984,8 @@ class rcube_imap
*/
function _search_index($mailbox, $criteria='ALL', $charset=NULL, $sort_field=NULL)
{
- if ($this->get_capability('sort'))
+ if ($sort_field && $this->get_capability('sort'))
{
- $sort_field = $sort_field ? $sort_field : $this->sort_field;
$charset = $charset ? $charset : $this->default_charset;
$a_messages = iil_C_Sort($this->conn, $mailbox, $sort_field, $criteria, FALSE, $charset);
}
diff --git a/program/lib/imap.inc b/program/lib/imap.inc
index 8704e78f5..fb971db68 100644
--- a/program/lib/imap.inc
+++ b/program/lib/imap.inc
@@ -902,10 +902,7 @@ function iil_StrToTime($str) {
function iil_C_Sort(&$conn, $mailbox, $field, $add='', $is_uid=FALSE,
$encoding = 'US-ASCII') {
- /* Do "SELECT" command */
- if (!iil_C_Select($conn, $mailbox)) {
- return false;
- }
+
$field = strtoupper($field);
if ($field == 'INTERNALDATE') {
$field = 'ARRIVAL';
@@ -917,6 +914,11 @@ function iil_C_Sort(&$conn, $mailbox, $field, $add='', $is_uid=FALSE,
if (!$fields[$field]) {
return false;
}
+
+ /* Do "SELECT" command */
+ if (!iil_C_Select($conn, $mailbox)) {
+ return false;
+ }
$is_uid = $is_uid ? 'UID ' : '';
@@ -924,16 +926,15 @@ function iil_C_Sort(&$conn, $mailbox, $field, $add='', $is_uid=FALSE,
$add = " $add";
}
- $fp = $conn->fp;
$command = 's ' . $is_uid . 'SORT (' . $field . ') ';
- $command .= $encoding . ' ALL ' . $add;
+ $command .= $encoding . ' ALL' . $add;
$line = $data = '';
- if (!iil_PutLineC($fp, $command)) {
+ if (!iil_PutLineC($conn->fp, $command)) {
return false;
}
do {
- $line = chop(iil_ReadLine($fp, 1024));
+ $line = chop(iil_ReadLine($conn->fp, 1024));
if (iil_StartsWith($line, '* SORT')) {
$data .= ($data ? ' ' : '') . substr($line, 7);
} else if (preg_match('/^[0-9 ]+$/', $line)) {