From 78925f8f1a9afb9475a9cf9ad1b35daade23da85 Mon Sep 17 00:00:00 2001 From: alecpl <alec@alec.pl> Date: Thu, 17 Sep 2009 08:07:58 -0400 Subject: [PATCH] - Fix incorrect count of new messages in folder list when using multiple IMAP clients (#1485995) - Fix all folders checking for new messages with disabled caching (#1486128) --- program/steps/mail/folders.inc | 61 ++++++++++++++++++------------ 1 files changed, 36 insertions(+), 25 deletions(-) diff --git a/program/steps/mail/folders.inc b/program/steps/mail/folders.inc index 5a22b7e..73d4ae8 100644 --- a/program/steps/mail/folders.inc +++ b/program/steps/mail/folders.inc @@ -5,7 +5,7 @@ | program/steps/mail/folders.inc | | | | This file is part of the RoundCube Webmail client | - | Copyright (C) 2005, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2009, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | | PURPOSE: | @@ -18,44 +18,55 @@ $Id$ */ -$REMOTE_REQUEST = TRUE; -$mbox = $IMAP->get_mailbox_name(); +// only process ajax requests +if (!$OUTPUT->ajax_call) + return; +$mbox_name = $IMAP->get_mailbox_name(); // send EXPUNGE command -if ($_action=='expunge') - { - $success = $IMAP->expunge($_GET['_mbox']); +if ($RCMAIL->action=='expunge' && ($mbox = get_input_value('_mbox', RCUBE_INPUT_POST))) +{ + $success = $IMAP->expunge($mbox); // reload message list if current mailbox - if ($success && $_GET['_reload']) - { - rcube_remote_response('this.clear_message_list();', TRUE); - $_action = 'list'; + if ($success && !empty($_REQUEST['_reload'])) + { + $OUTPUT->command('message_list.clear'); + $RCMAIL->action = 'list'; return; - } + } else $commands = "// expunged: $success\n"; - } +} // clear mailbox -else if ($_action=='purge') +else if ($RCMAIL->action=='purge' && ($mbox = get_input_value('_mbox', RCUBE_INPUT_POST))) +{ + $delimiter = $IMAP->get_hierarchy_delimiter(); + $trash_regexp = '/^' . preg_quote($CONFIG['trash_mbox'] . $delimiter, '/') . '/'; + $junk_regexp = '/^' . preg_quote($CONFIG['junk_mbox'] . $delimiter, '/') . '/'; + + // we should only be purging trash and junk (or their subfolders) + if ($mbox == $CONFIG['trash_mbox'] || $mbox == $CONFIG['junk_mbox'] + || preg_match($trash_regexp, $mbox) || preg_match($junk_regexp, $mbox)) { - $success = $IMAP->clear_mailbox($_GET['_mbox']); + $success = $IMAP->clear_mailbox($mbox); - if ($success && $_GET['_reload']) + if ($success && !empty($_REQUEST['_reload'])) { - $commands = "this.clear_message_list();\n"; - $commands .= "this.set_env('messagecount', 0);\n"; - $commands .= "this.set_env('pagecount', 0);\n"; - $commands .= sprintf("this.set_rowcount('%s');\n", rcmail_get_messagecount_text()); - $commands .= sprintf("this.set_unread_count('%s', 0);\n", addslashes($mbox)); + $OUTPUT->set_env('messagecount', 0); + $OUTPUT->set_env('pagecount', 0); + $OUTPUT->command('message_list.clear'); + $OUTPUT->command('set_rowcount', rcmail_get_messagecount_text()); + $OUTPUT->command('set_unread_count', $mbox_name, 0); + $_SESSION['unseen_count'][$mbox_name] = 0; } - else - $commands = "// purged: $success"; + else + $commands = "// purged: $success"; } +} +$OUTPUT->send($commands); - -rcube_remote_response($commands); -?> \ No newline at end of file +?> -- Gitblit v1.9.1