From e89d8f1fec3743e9ee1018d3bab1a375ab79cebf Mon Sep 17 00:00:00 2001
From: Aleksander Machniak <alec@alec.pl>
Date: Tue, 09 Jul 2013 12:45:38 -0400
Subject: [PATCH] Performance fix: Do not ask for folder attributes if we know that folder do not exists

---
 program/steps/settings/folders.inc |   18 ++++++++++--------
 1 files changed, 10 insertions(+), 8 deletions(-)

diff --git a/program/steps/settings/folders.inc b/program/steps/settings/folders.inc
index 34a72dd..e2a3f8a 100644
--- a/program/steps/settings/folders.inc
+++ b/program/steps/settings/folders.inc
@@ -232,16 +232,16 @@
         // add any necessary "virtual" parent folders
         if ($parent_folder && !isset($seen[$parent_folder])) {
             for ($i=1; $i<=$level; $i++) {
-	            $ancestor_folder = join($delimiter, array_slice($foldersplit, 0, $i));
-	            if ($ancestor_folder && !$seen[$ancestor_folder]++) {
-	                $ancestor_name = rcube_charset_convert($foldersplit[$i-1], 'UTF7-IMAP');
-	                $list_folders[] = array(
+                $ancestor_folder = join($delimiter, array_slice($foldersplit, 0, $i));
+                if ($ancestor_folder && !$seen[$ancestor_folder]++) {
+                    $ancestor_name = rcube_charset_convert($foldersplit[$i-1], 'UTF7-IMAP');
+                    $list_folders[] = array(
                         'id'      => $ancestor_folder,
                         'name'    => $ancestor_name,
                         'level'   => $i-1,
                         'virtual' => true,
                     );
-	            }
+                }
             }
         }
 
@@ -291,9 +291,11 @@
             $classes[] = 'virtual';
         }
 
-        if (!$protected) {
-            $attrs = $STORAGE->folder_attributes($folder['id']);
-            $noselect = in_array('\\Noselect', $attrs);
+        // Check \Noselect flag (of existing folder)
+        if (!$protected && in_array($folder['id'], $a_unsubscribed)) {
+                $attrs = $STORAGE->folder_attributes($folder['id']);
+                $noselect = in_array('\\Noselect', $attrs);
+            }
         }
 
         $disabled = (($protected && $subscribed) || $noselect);

--
Gitblit v1.9.1