summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoralecpl <alec@alec.pl>2008-12-04 19:07:29 +0000
committeralecpl <alec@alec.pl>2008-12-04 19:07:29 +0000
commit39cd51aff59d8a85321474ee573b09b507b3f24e (patch)
tree2142e138ff9ab8275eae7e260659c4fb4d6e4cdd
parent8374caaf202622124fa90ce8eb6ae29f5e6bf130 (diff)
- performance: connect to imap server only when needed
(some mail actions do not require imap connection)
-rw-r--r--index.php13
-rw-r--r--program/steps/mail/func.inc21
2 files changed, 20 insertions, 14 deletions
diff --git a/index.php b/index.php
index d4fc54304..74c7c21d8 100644
--- a/index.php
+++ b/index.php
@@ -121,14 +121,6 @@ else if ($RCMAIL->action != 'login' && $_SESSION['user_id'] && $RCMAIL->action !
}
-// 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')) {
@@ -223,11 +215,6 @@ while ($redirects < 5) {
}
-// 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);
diff --git a/program/steps/mail/func.inc b/program/steps/mail/func.inc
index dc0a70834..33503aec1 100644
--- a/program/steps/mail/func.inc
+++ b/program/steps/mail/func.inc
@@ -22,9 +22,25 @@
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))
$IMAP->set_mailbox(($_SESSION['mbox'] = $mbox));
@@ -64,6 +80,9 @@ if (empty($RCMAIL->action) || $RCMAIL->action == 'list')
$_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