diff options
| -rw-r--r-- | program/include/rcube_imap.php | 58 | ||||
| -rw-r--r-- | program/steps/mail/pagenav.inc | 8 | 
2 files changed, 46 insertions, 20 deletions
| diff --git a/program/include/rcube_imap.php b/program/include/rcube_imap.php index 3d04937fc..17ba91c03 100644 --- a/program/include/rcube_imap.php +++ b/program/include/rcube_imap.php @@ -113,7 +113,7 @@ class rcube_imap          $this->conn = new rcube_imap_generic();      } -     +      /**       * Connect to an IMAP server       * @@ -182,7 +182,7 @@ class rcube_imap          return false;      } -     +      /**       * Close IMAP connection       * Usually done on script shutdown @@ -195,7 +195,7 @@ class rcube_imap          $this->write_cache();      } -     +      /**       * Close IMAP connection and re-connect       * This is used to avoid some strange socket errors when talking to Courier IMAP @@ -233,7 +233,7 @@ class rcube_imap      {          return ($this->conn) ? $this->conn->error : '';      } -     +      /**       * Set options to be used in rcube_imap_generic::connect() @@ -245,7 +245,7 @@ class rcube_imap          $this->options = array_merge($this->options, (array)$opt);      } -     +      /**       * Set a root folder for the IMAP connection.       * @@ -267,7 +267,7 @@ class rcube_imap              $this->get_hierarchy_delimiter();      } -     +      /**       * Set default message charset       * @@ -281,7 +281,7 @@ class rcube_imap          $this->default_charset = $cs;      } -     +      /**       * This list of folders will be listed above all other folders       * @@ -299,7 +299,7 @@ class rcube_imap          }      } -     +      /**       * Set internal mailbox reference.       * @@ -321,7 +321,27 @@ class rcube_imap          $this->_clear_messagecount($mailbox);      } -     + +    /** +     * Forces selection of a mailbox +     * +     * @param  string $mailbox Mailbox/Folder name +     * @access public +     */ +    function select_mailbox($mailbox) +    { +        $mailbox = $this->mod_mailbox($mailbox); + +        $selected = $this->conn->select($mailbox); + +        if ($selected && $this->mailbox != $mailbox) { +            // clear messagecount cache for this mailbox +            $this->_clear_messagecount($mailbox); +            $this->mailbox = $mailbox; +        } +    } + +      /**       * Set internal list page       * @@ -333,7 +353,7 @@ class rcube_imap          $this->list_page = (int)$page;      } -     +      /**       * Set internal page size       * @@ -345,7 +365,7 @@ class rcube_imap          $this->page_size = (int)$size;      } -     +      /**       * Save a set of message ids for future message listing methods       * @@ -372,7 +392,7 @@ class rcube_imap          $this->search_sorted     = $sorted;      } -     +      /**       * Return the saved search set as hash array       * @return array Search set @@ -388,7 +408,7 @@ class rcube_imap  	    );      } -     +      /**       * Returns the currently used mailbox name       * @@ -400,7 +420,7 @@ class rcube_imap          return $this->conn->connected() ? $this->mod_mailbox($this->mailbox, 'out') : '';      } -     +      /**       * Returns the IMAP server's capability       * @@ -413,7 +433,7 @@ class rcube_imap          return $this->conn->getCapability(strtoupper($cap));      } -     +      /**       * Sets threading flag to the best supported THREAD algorithm       * @@ -437,7 +457,7 @@ class rcube_imap          return $this->threading;      } -     +      /**       * Checks the PERMANENTFLAGS capability of the current mailbox       * and returns true if the given flag is supported by the IMAP server @@ -453,7 +473,7 @@ class rcube_imap          return (in_array_nocase($imap_flag, $this->conn->data['PERMANENTFLAGS']));      } -     +      /**       * Returns the delimiter that is used by the IMAP server for folder separation       * @@ -471,7 +491,7 @@ class rcube_imap          return $this->delimiter;      } -     +      /**       * Get message count for a specific mailbox       * @@ -489,7 +509,7 @@ class rcube_imap          return $this->_messagecount($mailbox, $mode, $force, $status);      } -     +      /**       * Private method for getting nr of messages       * diff --git a/program/steps/mail/pagenav.inc b/program/steps/mail/pagenav.inc index b62520fab..e295114e1 100644 --- a/program/steps/mail/pagenav.inc +++ b/program/steps/mail/pagenav.inc @@ -20,7 +20,13 @@  */  $uid = get_input_value('_uid', RCUBE_INPUT_GET); -$cnt  = $IMAP->messagecount(NULL, 'ALL'); // Only messages, no threads here + +// Select mailbox first, for better performance +$mbox_name = $IMAP->get_mailbox_name(); +$IMAP->select_mailbox($mbox_name); + +// Get messages count (only messages, no threads here) +$cnt  = $IMAP->messagecount(NULL, 'ALL');  if ($_SESSION['sort_col'] == 'date' && $_SESSION['sort_order'] != 'DESC'      && empty($_REQUEST['_search']) && !$CONFIG['skip_deleted'] && !$IMAP->threading | 
