Changeset 3306 in subversion
- Timestamp:
- Mar 2, 2010 4:27:53 PM (3 years ago)
- Location:
- trunk/roundcubemail/program
- Files:
-
- 3 edited
-
include/rcube_imap.php (modified) (3 diffs)
-
lib/imap.inc (modified) (2 diffs)
-
steps/mail/check_recent.inc (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/roundcubemail/program/include/rcube_imap.php
r3304 r3306 496 496 return $a_mailbox_cache[$mailbox][$mode]; 497 497 498 if (!is_array($a_mailbox_cache[$mailbox])) 499 $a_mailbox_cache[$mailbox] = array(); 500 498 501 // RECENT count is fetched a bit different 499 502 if ($mode == 'RECENT') … … 514 517 $count = is_array($index) ? count($index) : 0; 515 518 } 516 else 517 { 519 else { 518 520 if ($mode == 'UNSEEN') 519 521 $count = iil_C_CountUnseen($this->conn, $mailbox); 520 else 522 else { 521 523 $count = iil_C_CountMessages($this->conn, $mailbox); 522 } 523 524 if (!is_array($a_mailbox_cache[$mailbox])) 525 $a_mailbox_cache[$mailbox] = array(); 526 524 $_SESSION['maxuid'][$mailbox] = $count ? $this->_id2uid($count) : 0; 525 } 526 } 527 527 528 $a_mailbox_cache[$mailbox][$mode] = (int)$count; 528 529 … … 864 865 return count($a_msg_headers); 865 866 } 866 867 868 /** 869 * Fetches IDS of pseudo recent messages. 870 * 871 * We compare the maximum UID to determine the number of 872 * new messages because the RECENT flag is not reliable. 873 * 874 * @param string Mailbox/folder name 875 * @return array List of recent message UIDs 876 */ 877 function recent_uids($mbox_name = null, $nofetch = false) 878 { 879 $mailbox = $mbox_name ? $this->mod_mailbox($mbox_name) : $this->mailbox; 880 $old_maxuid = intval($_SESSION['maxuid'][$mailbox]); 881 882 // refresh message count -> will update $_SESSION['maxuid'][$mailbox] 883 $this->messagecount($mbox_name, 'ALL', true); 884 885 if ($_SESSION['maxuid'][$mailbox] > $old_maxuid) { 886 $maxuid = max(1, $old_maxuid+1); 887 return array_values((array)iil_C_FetchHeaderIndex($this->conn, $mailbox, "$maxuid:*", 'UID', $this->skip_deleted, true)); 888 } 889 890 return array(); 891 } 867 892 868 893 /** -
trunk/roundcubemail/program/lib/imap.inc
r3261 r3306 916 916 } 917 917 918 function iil_C_FetchHeaderIndex(&$conn, $mailbox, $message_set, $index_field='', $skip_deleted=true ) {918 function iil_C_FetchHeaderIndex(&$conn, $mailbox, $message_set, $index_field='', $skip_deleted=true, $uidfetch=false) { 919 919 920 920 list($from_idx, $to_idx) = explode(':', $message_set); … … 950 950 // build FETCH command string 951 951 $key = 'fhi0'; 952 $cmd = $uidfetch ? 'UID FETCH' : 'FETCH'; 952 953 $deleted = $skip_deleted ? ' FLAGS' : ''; 953 954 954 955 if ($mode == 1 && $index_field == 'DATE') 955 $request = " FETCH$message_set (INTERNALDATE BODY.PEEK[HEADER.FIELDS (DATE)]$deleted)";956 $request = " $cmd $message_set (INTERNALDATE BODY.PEEK[HEADER.FIELDS (DATE)]$deleted)"; 956 957 else if ($mode == 1) 957 $request = " FETCH$message_set (BODY.PEEK[HEADER.FIELDS ($index_field)]$deleted)";958 $request = " $cmd $message_set (BODY.PEEK[HEADER.FIELDS ($index_field)]$deleted)"; 958 959 else if ($mode == 2) { 959 960 if ($index_field == 'SIZE') 960 $request = " FETCH$message_set (RFC822.SIZE$deleted)";961 $request = " $cmd $message_set (RFC822.SIZE$deleted)"; 961 962 else 962 $request = " FETCH$message_set ($index_field$deleted)";963 $request = " $cmd $message_set ($index_field$deleted)"; 963 964 } else if ($mode == 3) 964 $request = " FETCH$message_set (FLAGS)";965 $request = " $cmd $message_set (FLAGS)"; 965 966 else // 4 966 $request = " FETCH$message_set (INTERNALDATE$deleted)";967 $request = " $cmd $message_set (INTERNALDATE$deleted)"; 967 968 968 969 $request = $key . $request; -
trunk/roundcubemail/program/steps/mail/check_recent.inc
r3299 r3306 6 6 | | 7 7 | This file is part of the RoundCube Webmail client | 8 | Copyright (C) 2005-20 09, RoundCube Dev. - Switzerland |8 | Copyright (C) 2005-2010, RoundCube Dev. - Switzerland | 9 9 | Licensed under the GNU GPL | 10 10 | | … … 21 21 22 22 $a_mailboxes = $IMAP->list_mailboxes(); 23 $check_all = (bool)$RCMAIL->config->get('check_all_folders'); 24 25 // check if unread count of INBOX changed and refresh message list if so 26 if (!empty($_GET['_refresh'])) { 27 $unread_count = $IMAP->messagecount('INBOX', 'UNSEEN', TRUE); 28 if ($unread_count > $_SESSION['unseen_count']['INBOX']) { 29 $OUTPUT->command('set_unread_count', 'INBOX', $unread_count, true); 30 $OUTPUT->command('list_mailbox', 'INBOX', 1); // let the client switch to INBOX and get the message list 31 $OUTPUT->send(); 32 } 33 } 23 $check_all = !empty($_GET['_refresh']) || (bool)$RCMAIL->config->get('check_all_folders'); 34 24 35 25 // check recent/unseen counts for all mailboxes 36 26 foreach ($a_mailboxes as $mbox_name) { 37 27 if ($mbox_name == $IMAP->get_mailbox_name()) { 38 if ($recent _count = $IMAP->messagecount(NULL, 'RECENT', TRUE)) {28 if ($recents = $IMAP->recent_uids($mbox_name)) { 39 29 // refresh saved search set 40 30 if (($search_request = get_input_value('_search', RCUBE_INPUT_GPC)) && isset($_SESSION['search'][$search_request])) { 41 31 $_SESSION['search'][$search_request] = $IMAP->refresh_search(); 42 $all_count = $IMAP->messagecount();43 } else {44 $all_count = $IMAP->messagecount(NULL, 'ALL', TRUE);45 32 } 33 34 // get overall message count; allow caching because rcube_imap::recent_uids() did a refresh 35 $all_count = $IMAP->messagecount(); 46 36 47 37 $unread_count = $IMAP->messagecount(NULL, 'UNSEEN', TRUE); … … 54 44 $OUTPUT->command('set_rowcount', rcmail_get_messagecount_text($all_count)); 55 45 56 if ( rcmail::get_instance()->config->get('focus_on_new_message',true))46 if ($RCMAIL->config->get('focus_on_new_message',true)) 57 47 $OUTPUT->command('new_message_focus'); 58 48 … … 61 51 62 52 // trigger plugin hook 63 $RCMAIL->plugins->exec_hook('new_messages', array('mailbox' => $mbox_name, 'count' => $unread_count));53 $RCMAIL->plugins->exec_hook('new_messages', array('mailbox' => $mbox_name, 'count' => count($recents))); 64 54 65 55 // "No-list" mode, don't get messages … … 68 58 69 59 // use SEARCH/SORT to find recent messages 70 $search_str = ' RECENT';60 $search_str = 'UID '.min($recents).':'.max($recents); 71 61 if ($search_request) 72 62 $search_str .= ' '.$IMAP->search_string; 73 63 74 $result = $IMAP->search($mbox_name, $search_str, NULL, 'date'); 75 76 if ($result) { 77 // get the headers 64 if ($IMAP->search($mbox_name, $search_str, NULL, 'date')) { 65 // get the headers and add them to the list 78 66 $result_h = $IMAP->list_headers($mbox_name, 1, 'date', 'DESC'); 79 // add to the list80 67 rcmail_js_message_list($result_h, true, false); 81 68 }
Note: See TracChangeset
for help on using the changeset viewer.
