From 94e797c1fbc5ae1ce3c57bdc5cdaabd3a9f8f911 Mon Sep 17 00:00:00 2001
From: Thomas Bruederli <thomas@roundcube.net>
Date: Tue, 08 Apr 2014 09:17:19 -0400
Subject: [PATCH] Consider sort order in UID sort mode of multi-folder search results

---
 program/lib/Roundcube/rcube_result_multifolder.php |   11 +++++++++++
 program/lib/Roundcube/rcube_imap.php               |    4 ++++
 2 files changed, 15 insertions(+), 0 deletions(-)

diff --git a/program/lib/Roundcube/rcube_imap.php b/program/lib/Roundcube/rcube_imap.php
index 23cacd4..a2f610a 100644
--- a/program/lib/Roundcube/rcube_imap.php
+++ b/program/lib/Roundcube/rcube_imap.php
@@ -988,6 +988,10 @@
                 $a_msg_headers = array_slice(array_values($a_msg_headers), $from, $slice_length);
             }
             else {
+                if ($this->sort_order != $search_set->get_parameters('ORDER')) {
+                    $search_set->revert();
+                }
+
                 // slice resultset first...
                 $fetch = array();
                 foreach (array_slice($search_set->get(), $from, $slice_length) as $msg_id) {
diff --git a/program/lib/Roundcube/rcube_result_multifolder.php b/program/lib/Roundcube/rcube_result_multifolder.php
index 74a3d78..b5473b8 100644
--- a/program/lib/Roundcube/rcube_result_multifolder.php
+++ b/program/lib/Roundcube/rcube_result_multifolder.php
@@ -130,6 +130,17 @@
     public function revert()
     {
         $this->order = $this->order == 'ASC' ? 'DESC' : 'ASC';
+        $this->index = array();
+
+        // revert order in all sub-sets
+        foreach ($this->sets as $set) {
+            if ($this->order != $set->get_parameters('ORDER')) {
+                $set->revert();
+            }
+            $folder = $set->get_parameters('MAILBOX');
+            $index = array_map(function($uid) use ($folder) { return $uid . '-' . $folder; }, $set->get());
+            $this->index = array_merge($this->index, $index);
+        }
     }
 
 

--
Gitblit v1.9.1