Aleksander Machniak
2013-12-25 da5fa28d5705ab2b9991f39741f2a8f1751a25ad
Display different icons when Trash folder is empty or full (#1485775)
10 files modified
113 ■■■■■ changed files
CHANGELOG 1 ●●●● patch | view | raw | blame | history
program/js/app.js 6 ●●●●● patch | view | raw | blame | history
program/steps/mail/check_recent.inc 6 ●●●●● patch | view | raw | blame | history
program/steps/mail/folders.inc 20 ●●●●● patch | view | raw | blame | history
program/steps/mail/getunread.inc 42 ●●●●● patch | view | raw | blame | history
program/steps/mail/list.inc 11 ●●●● patch | view | raw | blame | history
program/steps/mail/move_del.inc 20 ●●●● patch | view | raw | blame | history
skins/classic/images/icons/folders.gif patch | view | raw | blame | history
skins/classic/images/icons/folders.png patch | view | raw | blame | history
skins/classic/mail.css 7 ●●●● patch | view | raw | blame | history
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)
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)
  {
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
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 {
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();
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();
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
skins/classic/images/icons/folders.gif

skins/classic/images/icons/folders.png

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