From 8881766a9fc626585c9d00a139ff3dd5621745dd Mon Sep 17 00:00:00 2001
From: alecpl <alec@alec.pl>
Date: Wed, 05 Oct 2011 07:35:19 -0400
Subject: [PATCH] - Improved performance by skipping folders list sorting when it's not needed in folder manager

---
 program/steps/settings/folders.inc |    2 +-
 program/include/rcube_imap.php     |   30 ++++++++++++++++++------------
 2 files changed, 19 insertions(+), 13 deletions(-)

diff --git a/program/include/rcube_imap.php b/program/include/rcube_imap.php
index 5eee8d6..859c089 100644
--- a/program/include/rcube_imap.php
+++ b/program/include/rcube_imap.php
@@ -2914,15 +2914,16 @@
     /**
      * Public method for listing subscribed folders
      *
-     * @param   string  $root   Optional root folder
-     * @param   string  $name   Optional name pattern
-     * @param   string  $filter Optional filter
-     * @param   string  $rights Optional ACL requirements
+     * @param   string  $root      Optional root folder
+     * @param   string  $name      Optional name pattern
+     * @param   string  $filter    Optional filter
+     * @param   string  $rights    Optional ACL requirements
+     * @param   bool    $skip_sort Enable to return unsorted list (for better performance)
      *
      * @return  array   List of mailboxes/folders
      * @access  public
      */
-    function list_mailboxes($root='', $name='*', $filter=null, $rights=null)
+    function list_mailboxes($root='', $name='*', $filter=null, $rights=null, $skip_sort=false)
     {
         $a_mboxes = $this->_list_mailboxes($root, $name, $filter, $rights);
 
@@ -2932,7 +2933,9 @@
         }
 
         // sort mailboxes
-        $a_mboxes = $this->_sort_mailbox_list($a_mboxes);
+        if (!$skip_sort) {
+            $a_mboxes = $this->_sort_mailbox_list($a_mboxes);
+        }
 
         return $a_mboxes;
     }
@@ -3039,14 +3042,15 @@
     /**
      * Get a list of all folders available on the IMAP server
      *
-     * @param string $root   IMAP root dir
-     * @param string  $name   Optional name pattern
-     * @param mixed   $filter Optional filter
-     * @param string  $rights Optional ACL requirements
+     * @param string  $root      IMAP root dir
+     * @param string  $name      Optional name pattern
+     * @param mixed   $filter    Optional filter
+     * @param string  $rights    Optional ACL requirements
+     * @param bool    $skip_sort Enable to return unsorted list (for better performance)
      *
      * @return array Indexed array with folder names
      */
-    function list_unsubscribed($root='', $name='*', $filter=null, $rights=null)
+    function list_unsubscribed($root='', $name='*', $filter=null, $rights=null, $skip_sort=false)
     {
         // @TODO: caching
         // Give plugins a chance to provide a list of mailboxes
@@ -3076,7 +3080,9 @@
         }
 
         // filter folders and sort them
-        $a_mboxes = $this->_sort_mailbox_list($a_mboxes);
+        if (!$skip_sort) {
+            $a_mboxes = $this->_sort_mailbox_list($a_mboxes);
+        }
 
         return $a_mboxes;
     }
diff --git a/program/steps/settings/folders.inc b/program/steps/settings/folders.inc
index 1d5df46..206f62c 100644
--- a/program/steps/settings/folders.inc
+++ b/program/steps/settings/folders.inc
@@ -203,7 +203,7 @@
     $IMAP->clear_cache('mailboxes', true);
 
     $a_unsubscribed = $IMAP->list_unsubscribed();
-    $a_subscribed   = $IMAP->list_mailboxes();
+    $a_subscribed   = $IMAP->list_mailboxes('', '*', null, null, true); // unsorted
     $delimiter      = $IMAP->get_hierarchy_delimiter();
     $namespace      = $IMAP->get_namespace();
     $a_js_folders   = array();

--
Gitblit v1.9.1