iil_C_FetchHeaders does not always return the headers in the correct order -> sort them manually; improved rcube_header_sorter performance

release-0.6
thomascube 16 years ago
parent bf0cb98701
commit 05d180a826

@ -575,10 +575,9 @@ class rcube_imap
{
// retrieve headers from IMAP
if ($this->get_capability('sort') && ($msg_index = iil_C_Sort($this->conn, $mailbox, $this->sort_field, $this->skip_deleted ? 'UNDELETED' : '')))
{
$mymsgidx = array_slice ($msg_index, $begin, $end-$begin, true);
{
$mymsgidx = array_slice ($msg_index, $begin, $end-$begin);
$msgs = join(",", $mymsgidx);
$headers_sorted = true;
}
else
{
@ -2789,7 +2788,7 @@ class rcube_header_sorter
*/
function set_sequence_numbers($seqnums)
{
$this->sequence_numbers = $seqnums;
$this->sequence_numbers = array_flip($seqnums);
}
/**
@ -2809,19 +2808,6 @@ class rcube_header_sorter
uasort($headers, array($this, "compare_seqnums"));
}
/**
* Get the position of a message sequence number in my sequence_numbers array
*
* @param int Message sequence number contained in sequence_numbers
* @return int Position, -1 if not found
*/
function position_of($seqnum)
{
$pos = array_search($seqnum, $this->sequence_numbers);
if ($pos === false) return -1;
return $pos;
}
/**
* Sort method called by uasort()
*/
@ -2832,12 +2818,11 @@ class rcube_header_sorter
$seqb = $b->id;
// then find each sequence number in my ordered list
$posa = $this->position_of($seqa);
$posb = $this->position_of($seqb);
$posa = isset($this->sequence_numbers[$seqa]) ? intval($this->sequence_numbers[$seqa]) : -1;
$posb = isset($this->sequence_numbers[$seqb]) ? intval($this->sequence_numbers[$seqb]) : -1;
// return the relative position as the comparison value
$ret = $posa - $posb;
return $ret;
return $posa - $posb;
}
}

Loading…
Cancel
Save