From da5fa28d5705ab2b9991f39741f2a8f1751a25ad Mon Sep 17 00:00:00 2001 From: Aleksander Machniak <alec@alec.pl> Date: Wed, 25 Dec 2013 04:33:06 -0500 Subject: [PATCH] Display different icons when Trash folder is empty or full (#1485775) --- CHANGELOG | 1 program/steps/mail/list.inc | 11 ++++- skins/classic/mail.css | 7 +++ skins/classic/images/icons/folders.gif | 0 program/steps/mail/folders.inc | 20 ++++++---- program/steps/mail/check_recent.inc | 6 +++ program/steps/mail/getunread.inc | 42 ++++++++++++-------- skins/classic/images/icons/folders.png | 0 program/js/app.js | 6 +++ program/steps/mail/move_del.inc | 20 +++++++--- 10 files changed, 79 insertions(+), 34 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 146aa07..7a64d18 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,7 @@ CHANGELOG Roundcube Webmail =========================== +- Display different icons when Trash folder is empty or full (#1485775) - Remember last position of more headers switch (#1488323) - Fix so message flags modified by another client are applied on the list on refresh (#1485186) - Fix broken text/* attachments when forwarding/editing a message (#1489426) diff --git a/program/js/app.js b/program/js/app.js index 2438ff9..e6cc281 100644 --- a/program/js/app.js +++ b/program/js/app.js @@ -6459,6 +6459,12 @@ 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 60da68a..d2d27a2 100644 --- a/program/steps/mail/check_recent.inc +++ b/program/steps/mail/check_recent.inc @@ -25,6 +25,7 @@ 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 @@ $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 d7cfd93..1c9ed0d 100644 --- a/program/steps/mail/folders.inc +++ b/program/steps/mail/folders.inc @@ -27,7 +27,6 @@ // send EXPUNGE command if ($RCMAIL->action == 'expunge') { - $success = $RCMAIL->storage->expunge_folder($mbox); // reload message list if current mailbox @@ -45,16 +44,16 @@ $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 @@ $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 fda6448..3b93e8e 100644 --- a/program/steps/mail/getunread.inc +++ b/program/steps/mail/getunread.inc @@ -23,27 +23,35 @@ if (!empty($a_folders)) { - $current = $RCMAIL->storage->get_folder(); - $inbox = ($current == 'INBOX'); - $check_all = (bool)$RCMAIL->config->get('check_all_folders'); + $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_row) { - $unseen_old = rcmail_get_unseen_count($mbox_row); + foreach ($a_folders as $mbox) { + $unseen_old = rcmail_get_unseen_count($mbox); - if (!$check_all && $unseen_old !== null && $mbox_row != $current) - $unseen = $unseen_old; - else - $unseen = $RCMAIL->storage->count($mbox_row, 'UNSEEN', $unseen_old === null); + 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_row == $current) { - $OUTPUT->command('set_unread_count', $mbox_row, $unseen, $inbox && $mbox_row == 'INBOX'); + // 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 91c53e8..277564c 100644 --- a/program/steps/mail/list.inc +++ b/program/steps/mail/list.inc @@ -90,12 +90,14 @@ 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 @@ $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 5873739..7564bb8 100644 --- a/program/steps/mail/move_del.inc +++ b/program/steps/mail/move_del.inc @@ -28,12 +28,13 @@ $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 @@ $_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 @@ $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 @@ 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 diff --git a/skins/classic/images/icons/folders.gif b/skins/classic/images/icons/folders.gif index eb06bd8..2795194 100644 --- a/skins/classic/images/icons/folders.gif +++ b/skins/classic/images/icons/folders.gif Binary files differ diff --git a/skins/classic/images/icons/folders.png b/skins/classic/images/icons/folders.png index 4c27052..9243252 100644 --- a/skins/classic/images/icons/folders.png +++ b/skins/classic/images/icons/folders.png Binary files differ diff --git a/skins/classic/mail.css b/skins/classic/mail.css index bf07383..f5406b5 100644 --- a/skins/classic/mail.css +++ b/skins/classic/mail.css @@ -425,7 +425,12 @@ #mailboxlist li.trash a { - background-position: 5px -91px; + background-position: 5px -180px; +} + +#mailboxlist li.trash.empty a +{ + background-position: 5px -90px; } #mailboxlist li a -- Gitblit v1.9.1