diff options
author | thomascube <thomas@roundcube.net> | 2008-05-27 08:08:30 +0000 |
---|---|---|
committer | thomascube <thomas@roundcube.net> | 2008-05-27 08:08:30 +0000 |
commit | 05d180a826ed0bf32df82116befe62c0e6128da0 (patch) | |
tree | 7a74a1ca0179564acb4c6eb31afa77ec7a96b2a7 /program/include | |
parent | bf0cb98701a616ea78ffe2579d9e2efa1ae9d3d2 (diff) |
iil_C_FetchHeaders does not always return the headers in the correct order -> sort them manually; improved rcube_header_sorter performance
Diffstat (limited to 'program/include')
-rw-r--r-- | program/include/rcube_imap.php | 27 |
1 files changed, 6 insertions, 21 deletions
diff --git a/program/include/rcube_imap.php b/program/include/rcube_imap.php index e9aee3772..96e1d64cb 100644 --- a/program/include/rcube_imap.php +++ b/program/include/rcube_imap.php @@ -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); } /** @@ -2810,19 +2809,6 @@ class rcube_header_sorter } /** - * 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() */ function compare_seqnums($a, $b) @@ -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; } } |