summaryrefslogtreecommitdiff
path: root/program
diff options
context:
space:
mode:
Diffstat (limited to 'program')
-rw-r--r--program/js/app.js6
-rw-r--r--program/steps/mail/check_recent.inc6
-rw-r--r--program/steps/mail/folders.inc20
-rw-r--r--program/steps/mail/getunread.inc48
-rw-r--r--program/steps/mail/list.inc11
-rw-r--r--program/steps/mail/move_del.inc20
6 files changed, 75 insertions, 36 deletions
diff --git a/program/js/app.js b/program/js/app.js
index 2438ff959..e6cc28110 100644
--- a/program/js/app.js
+++ b/program/js/app.js
@@ -6459,6 +6459,12 @@ function rcube_webmail()
this.env.quota_content = content;
};
+ // update trash folder state
+ this.set_trash_count = function(count)
+ {
+ this[(count ? 'un' : '') + 'mark_folder'](this.env.trash_mailbox, 'empty', '', true);
+ };
+
// update the mailboxlist
this.set_unread_count = function(mbox, count, set_title, mark)
{
diff --git a/program/steps/mail/check_recent.inc b/program/steps/mail/check_recent.inc
index 60da68a96..d2d27a2ca 100644
--- a/program/steps/mail/check_recent.inc
+++ b/program/steps/mail/check_recent.inc
@@ -25,6 +25,7 @@ if (empty($_REQUEST['_folderlist']) && empty($_REQUEST['_list'])) {
return;
}
+$trash = $RCMAIL->config->get('trash_mbox');
$current = $RCMAIL->storage->get_folder();
$check_all = $RCMAIL->action != 'refresh' || (bool)$RCMAIL->config->get('check_all_folders');
@@ -132,6 +133,11 @@ foreach ($a_mailboxes as $mbox_name) {
$RCMAIL->output->set_env('recent_flags', $flags);
}
}
+
+ // set trash folder state
+ if ($mbox_name === $trash) {
+ $OUTPUT->command('set_trash_count', $RCMAIL->storage->count($mbox_name, 'EXISTS'));
+ }
}
// trigger refresh hook
diff --git a/program/steps/mail/folders.inc b/program/steps/mail/folders.inc
index d7cfd93f3..1c9ed0dae 100644
--- a/program/steps/mail/folders.inc
+++ b/program/steps/mail/folders.inc
@@ -27,7 +27,6 @@ $mbox = rcube_utils::get_input_value('_mbox', rcube_utils::INPUT_POST, true);
// send EXPUNGE command
if ($RCMAIL->action == 'expunge') {
-
$success = $RCMAIL->storage->expunge_folder($mbox);
// reload message list if current mailbox
@@ -45,16 +44,16 @@ if ($RCMAIL->action == 'expunge') {
$RCMAIL->display_server_error();
}
}
-
// clear mailbox
-else if ($RCMAIL->action == 'purge')
-{
- $delimiter = $RCMAIL->storage->get_hierarchy_delimiter();
- $trash_regexp = '/^' . preg_quote($CONFIG['trash_mbox'] . $delimiter, '/') . '/';
- $junk_regexp = '/^' . preg_quote($CONFIG['junk_mbox'] . $delimiter, '/') . '/';
+else if ($RCMAIL->action == 'purge') {
+ $delimiter = $RCMAIL->storage->get_hierarchy_delimiter();
+ $trash_mbox = $RCMAIL->config->get('trash_mbox');
+ $junk_mbox = $RCMAIL->config->get('junk_mbox');
+ $trash_regexp = '/^' . preg_quote($trash_mbox . $delimiter, '/') . '/';
+ $junk_regexp = '/^' . preg_quote($junk_mbox . $delimiter, '/') . '/';
// we should only be purging trash and junk (or their subfolders)
- if ($mbox == $CONFIG['trash_mbox'] || $mbox == $CONFIG['junk_mbox']
+ if ($mbox == $trash_mbox || $mbox == $junk_mbox
|| preg_match($trash_regexp, $mbox) || preg_match($junk_regexp, $mbox)
) {
$success = $RCMAIL->storage->clear_folder($mbox);
@@ -71,6 +70,11 @@ else if ($RCMAIL->action == 'purge')
$OUTPUT->command('set_unread_count', $mbox, 0);
$OUTPUT->command('set_quota', $RCMAIL->quota_content());
rcmail_set_unseen_count($mbox, 0);
+
+ // set trash folder state
+ if ($mbox === $trash_mbox) {
+ $OUTPUT->command('set_trash_count', 0);
+ }
}
}
else {
diff --git a/program/steps/mail/getunread.inc b/program/steps/mail/getunread.inc
index fda6448d4..3b93e8ef6 100644
--- a/program/steps/mail/getunread.inc
+++ b/program/steps/mail/getunread.inc
@@ -23,27 +23,35 @@ $a_folders = $RCMAIL->storage->list_folders_subscribed('', '*', 'mail');
if (!empty($a_folders))
{
- $current = $RCMAIL->storage->get_folder();
- $inbox = ($current == 'INBOX');
- $check_all = (bool)$RCMAIL->config->get('check_all_folders');
-
- foreach ($a_folders as $mbox_row) {
- $unseen_old = rcmail_get_unseen_count($mbox_row);
-
- if (!$check_all && $unseen_old !== null && $mbox_row != $current)
- $unseen = $unseen_old;
- else
- $unseen = $RCMAIL->storage->count($mbox_row, 'UNSEEN', $unseen_old === null);
-
- // call it always for current folder, so it can update counter
- // after possible message status change when opening a message
- // not in preview frame
- if ($unseen || $unseen_old === null || $mbox_row == $current) {
- $OUTPUT->command('set_unread_count', $mbox_row, $unseen, $inbox && $mbox_row == 'INBOX');
+ $current = $RCMAIL->storage->get_folder();
+ $inbox = ($current == 'INBOX');
+ $trash = $RCMAIL->config->get('trash_mbox');
+ $check_all = (bool)$RCMAIL->config->get('check_all_folders');
+
+ foreach ($a_folders as $mbox) {
+ $unseen_old = rcmail_get_unseen_count($mbox);
+
+ if (!$check_all && $unseen_old !== null && $mbox != $current) {
+ $unseen = $unseen_old;
+ }
+ else {
+ $unseen = $RCMAIL->storage->count($mbox, 'UNSEEN', $unseen_old === null);
+ }
+
+ // call it always for current folder, so it can update counter
+ // after possible message status change when opening a message
+ // not in preview frame
+ if ($unseen || $unseen_old === null || $mbox == $current) {
+ $OUTPUT->command('set_unread_count', $mbox, $unseen, $inbox && $mbox_row == 'INBOX');
+ }
+
+ rcmail_set_unseen_count($mbox, $unseen);
+
+ // set trash folder state
+ if ($mbox === $trash) {
+ $OUTPUT->command('set_trash_count', $RCMAIL->storage->count($mbox, 'EXISTS'));
+ }
}
-
- rcmail_set_unseen_count($mbox_row, $unseen);
- }
}
$OUTPUT->send();
diff --git a/program/steps/mail/list.inc b/program/steps/mail/list.inc
index 91c53e852..277564c38 100644
--- a/program/steps/mail/list.inc
+++ b/program/steps/mail/list.inc
@@ -90,12 +90,14 @@ if (empty($search_request) && empty($a_headers)) {
rcmail_send_unread_count($mbox_name, !empty($_REQUEST['_refresh']), $unseen);
// update message count display
-$pages = ceil($count/$RCMAIL->storage->get_pagesize());
+$pages = ceil($count/$RCMAIL->storage->get_pagesize());
+$exists = $RCMAIL->storage->count($mbox_name, 'EXISTS');
+
$OUTPUT->set_env('messagecount', $count);
$OUTPUT->set_env('pagecount', $pages);
$OUTPUT->set_env('threading', $threading);
$OUTPUT->set_env('current_page', $count ? $RCMAIL->storage->get_page() : 1);
-$OUTPUT->set_env('exists', $RCMAIL->storage->count($mbox_name, 'EXISTS'));
+$OUTPUT->set_env('exists', $exists);
$OUTPUT->command('set_rowcount', rcmail_get_messagecount_text($count), $mbox_name);
// add message rows
@@ -123,5 +125,10 @@ else {
$OUTPUT->show_message('nomessagesfound', 'notice');
}
+// set trash folder state
+if ($mbox_name === $RCMAIL->config->get('trash_mbox')) {
+ $OUTPUT->command('set_trash_count', $exists);
+}
+
// send response
$OUTPUT->send();
diff --git a/program/steps/mail/move_del.inc b/program/steps/mail/move_del.inc
index 587373997..7564bb89d 100644
--- a/program/steps/mail/move_del.inc
+++ b/program/steps/mail/move_del.inc
@@ -28,12 +28,13 @@ $threading = (bool) $RCMAIL->storage->get_threading();
$old_count = $RCMAIL->storage->count(NULL, $threading ? 'THREADS' : 'ALL');
$old_pages = ceil($old_count / $RCMAIL->storage->get_pagesize());
+$trash = $RCMAIL->config->get('trash_mbox');
+
// move messages
if ($RCMAIL->action == 'move' && !empty($_POST['_uid']) && strlen($_POST['_target_mbox'])) {
$count = sizeof(explode(',', ($uids = rcube_utils::get_input_value('_uid', rcube_utils::INPUT_POST))));
$target = rcube_utils::get_input_value('_target_mbox', rcube_utils::INPUT_POST, true);
$mbox = rcube_utils::get_input_value('_mbox', rcube_utils::INPUT_POST, true);
- $trash = $RCMAIL->config->get('trash_mbox');
$moved = $RCMAIL->storage->move_message($uids, $target, $mbox);
@@ -86,16 +87,15 @@ if ($search_request && $RCMAIL->storage->get_search_set()) {
$_SESSION['search'] = $RCMAIL->storage->refresh_search();
}
-if ($_POST['_from'] == 'show')
-{
+if ($_POST['_from'] == 'show') {
if ($next = rcube_utils::get_input_value('_next_uid', rcube_utils::INPUT_GPC))
$OUTPUT->command('show_message', $next);
else
$OUTPUT->command('command', 'list');
}
-else
-{
+else {
$msg_count = $RCMAIL->storage->count(NULL, $threading ? 'THREADS' : 'ALL');
+ $exists = $RCMAIL->storage->count($mbox, 'EXISTS', true);
$page_size = $RCMAIL->storage->get_pagesize();
$page = $RCMAIL->storage->get_page();
$pages = ceil($msg_count / $page_size);
@@ -114,7 +114,7 @@ else
$OUTPUT->set_env('messagecount', $msg_count);
$OUTPUT->set_env('current_page', $page);
$OUTPUT->set_env('pagecount', $pages);
- $OUTPUT->set_env('exists', $RCMAIL->storage->count($mbox, 'EXISTS', true));
+ $OUTPUT->set_env('exists', $exists);
// update mailboxlist
$mbox = $RCMAIL->storage->get_folder();
@@ -144,6 +144,14 @@ else
rcmail_js_message_list($a_headers, false);
}
+
+ // set trash folder state
+ if ($mbox === $trash) {
+ $OUTPUT->command('set_trash_count', $exists);
+ }
+ else if ($target !== null && $target === $trash) {
+ $OUTPUT->command('set_trash_count', $RCMAIL->storage->count($trash, 'EXISTS'));
+ }
}
// send response