summaryrefslogtreecommitdiff
path: root/program/steps/mail
diff options
context:
space:
mode:
authorthomascube <thomas@roundcube.net>2010-03-02 21:27:53 +0000
committerthomascube <thomas@roundcube.net>2010-03-02 21:27:53 +0000
commit7c9d922b96f9a88b350d6e07f5bde84ccc40f9b0 (patch)
tree52c1887baa334a3d6eeed51a379a2abaa6a77834 /program/steps/mail
parentffaea6f6ded918d8d12d858ede0cda8ef5655aa4 (diff)
New recent check based on UIDs
Diffstat (limited to 'program/steps/mail')
-rw-r--r--program/steps/mail/check_recent.inc35
1 files changed, 11 insertions, 24 deletions
diff --git a/program/steps/mail/check_recent.inc b/program/steps/mail/check_recent.inc
index 4ae6ad2be..caf8b8282 100644
--- a/program/steps/mail/check_recent.inc
+++ b/program/steps/mail/check_recent.inc
@@ -5,7 +5,7 @@
| program/steps/mail/check_recent.inc |
| |
| This file is part of the RoundCube Webmail client |
- | Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2010, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
| PURPOSE: |
@@ -20,30 +20,20 @@
*/
$a_mailboxes = $IMAP->list_mailboxes();
-$check_all = (bool)$RCMAIL->config->get('check_all_folders');
-
-// check if unread count of INBOX changed and refresh message list if so
-if (!empty($_GET['_refresh'])) {
- $unread_count = $IMAP->messagecount('INBOX', 'UNSEEN', TRUE);
- if ($unread_count > $_SESSION['unseen_count']['INBOX']) {
- $OUTPUT->command('set_unread_count', 'INBOX', $unread_count, true);
- $OUTPUT->command('list_mailbox', 'INBOX', 1); // let the client switch to INBOX and get the message list
- $OUTPUT->send();
- }
-}
+$check_all = !empty($_GET['_refresh']) || (bool)$RCMAIL->config->get('check_all_folders');
// check recent/unseen counts for all mailboxes
foreach ($a_mailboxes as $mbox_name) {
if ($mbox_name == $IMAP->get_mailbox_name()) {
- if ($recent_count = $IMAP->messagecount(NULL, 'RECENT', TRUE)) {
+ if ($recents = $IMAP->recent_uids($mbox_name)) {
// refresh saved search set
if (($search_request = get_input_value('_search', RCUBE_INPUT_GPC)) && isset($_SESSION['search'][$search_request])) {
$_SESSION['search'][$search_request] = $IMAP->refresh_search();
- $all_count = $IMAP->messagecount();
- } else {
- $all_count = $IMAP->messagecount(NULL, 'ALL', TRUE);
}
+ // get overall message count; allow caching because rcube_imap::recent_uids() did a refresh
+ $all_count = $IMAP->messagecount();
+
$unread_count = $IMAP->messagecount(NULL, 'UNSEEN', TRUE);
$_SESSION['unseen_count'][$mbox_name] = $unread_count;
@@ -53,30 +43,27 @@ foreach ($a_mailboxes as $mbox_name) {
$OUTPUT->command('set_unread_count', $mbox_name, $unread_count, ($mbox_name == 'INBOX'));
$OUTPUT->command('set_rowcount', rcmail_get_messagecount_text($all_count));
- if (rcmail::get_instance()->config->get('focus_on_new_message',true))
+ if ($RCMAIL->config->get('focus_on_new_message',true))
$OUTPUT->command('new_message_focus');
if (!empty($_GET['_quota']))
$OUTPUT->command('set_quota', rcmail_quota_content());
// trigger plugin hook
- $RCMAIL->plugins->exec_hook('new_messages', array('mailbox' => $mbox_name, 'count' => $unread_count));
+ $RCMAIL->plugins->exec_hook('new_messages', array('mailbox' => $mbox_name, 'count' => count($recents)));
// "No-list" mode, don't get messages
if (empty($_GET['_list']))
continue;
// use SEARCH/SORT to find recent messages
- $search_str = 'RECENT';
+ $search_str = 'UID '.min($recents).':'.max($recents);
if ($search_request)
$search_str .= ' '.$IMAP->search_string;
- $result = $IMAP->search($mbox_name, $search_str, NULL, 'date');
-
- if ($result) {
- // get the headers
+ if ($IMAP->search($mbox_name, $search_str, NULL, 'date')) {
+ // get the headers and add them to the list
$result_h = $IMAP->list_headers($mbox_name, 1, 'date', 'DESC');
- // add to the list
rcmail_js_message_list($result_h, true, false);
}
}