alecpl
2008-11-15 e2e745fb4ee52b11063a1654663c018084584586
- don't use SORT when SEARCH is better (sort field not specified)


2 files modified
20 ■■■■ changed files
program/include/rcube_imap.php 3 ●●●● patch | view | raw | blame | history
program/lib/imap.inc 17 ●●●● patch | view | raw | blame | history
program/include/rcube_imap.php
@@ -984,9 +984,8 @@
   */
  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);
      }
program/lib/imap.inc
@@ -902,10 +902,7 @@
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 @@
    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 @@
        $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)) {