alecpl
2008-12-04 39cd51aff59d8a85321474ee573b09b507b3f24e
- performance: connect to imap server only when needed
(some mail actions do not require imap connection)


2 files modified
34 ■■■■■ changed files
index.php 13 ●●●●● patch | view | raw | blame | history
program/steps/mail/func.inc 21 ●●●●● patch | view | raw | blame | history
index.php
@@ -121,14 +121,6 @@
}
// log in to imap server
if (!empty($RCMAIL->user->ID) && $RCMAIL->task == 'mail') {
  if (!$RCMAIL->imap_connect()) {
    $RCMAIL->kill_session();
  }
}
// check client X-header to verify request origin
if ($OUTPUT->ajax_call) {
  if (!$RCMAIL->config->get('devel_mode') && !rc_request_header('X-RoundCube-Referer')) {
@@ -222,11 +214,6 @@
  }
}
// make sure the message count is refreshed (for default view)
if ($RCMAIL->task == 'mail') {
  $IMAP->messagecount($_SESSION['mbox'], 'ALL', true);
}
// parse main template (default)
$OUTPUT->send($RCMAIL->task);
program/steps/mail/func.inc
@@ -22,8 +22,24 @@
require_once('lib/enriched.inc');
require_once('include/rcube_smtp.inc');
$EMAIL_ADDRESS_PATTERN = '/([a-z0-9][a-z0-9\-\.\+\_]*@[a-z0-9]([a-z0-9\-][.]?)*[a-z0-9]\\.[a-z]{2,5})/i';
// actions that do not require imap connection
$NOIMAP_ACTIONS = array('spell', 'addcontact', 'autocomplete', 'upload');
// log in to imap server
if (!in_array($RCMAIL->action, $NOIMAP_ACTIONS) && !$RCMAIL->imap_connect()) {
  $RCMAIL->kill_session();
  if ($OUTPUT->ajax_call)
    $OUTPUT->redirect(array(), 2000);
  $OUTPUT->set_env('task', 'login');
  $OUTPUT->send('login');
}
// set imap properties and session vars
if ($mbox = get_input_value('_mbox', RCUBE_INPUT_GPC))
@@ -64,6 +80,9 @@
      $_SESSION['search'][$search_request] = $IMAP->get_search_set();
      $OUTPUT->set_env('search_request', $search_request);
      }
      // make sure the message count is refreshed (for default view)
      $IMAP->messagecount($mbox_name, 'ALL', true);
    }
    
  // set current mailbox in client environment