alecpl
2009-09-17 78925f8f1a9afb9475a9cf9ad1b35daade23da85
- 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)


7 files modified
70 ■■■■ changed files
CHANGELOG 2 ●●●●● patch | view | raw | blame | history
program/steps/mail/check_recent.inc 22 ●●●●● patch | view | raw | blame | history
program/steps/mail/folders.inc 2 ●●●●● patch | view | raw | blame | history
program/steps/mail/getunread.inc 11 ●●●● patch | view | raw | blame | history
program/steps/mail/list.inc 10 ●●●● patch | view | raw | blame | history
program/steps/mail/mark.inc 11 ●●●●● patch | view | raw | blame | history
program/steps/mail/move_del.inc 12 ●●●●● patch | view | raw | blame | history
CHANGELOG
@@ -1,6 +1,8 @@
CHANGELOG RoundCube Webmail
===========================
- 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)
- Support skins in 'archive' and 'markasjunk' plugins
- Added 'html_editor' hook (#1486068)
- Fix DB constraint violation when populating messages cache (#1486052)
program/steps/mail/check_recent.inc
@@ -68,12 +68,30 @@
        rcmail_js_message_list($result_h, true, false);
      }
    }
    else {
      send_unread_count($mbox_name);
  }
  else if ($unseen = $IMAP->messagecount($mbox_name, 'UNSEEN', $check_all)) {
    $OUTPUT->command('set_unread_count', $mbox_name, $unseen);
  }
  else if ($check_all) {
    send_unread_count($mbox_name);
  }
}
$OUTPUT->send();
function send_unread_count($mbox_name)
{
    global $RCMAIL;
    $old_unseen = $_SESSION['unseen_count'][$mbox_name];
    $unseen = $RCMAIL->imap->messagecount($mbox_name, 'UNSEEN', true);
    if ($unseen != $old_unseen)
      $RCMAIL->output->command('set_unread_count', $mbox_name, $unseen, ($mbox_name == 'INBOX'));
    // @TODO: this data is doubled (session and cache tables) if caching is enabled
    $_SESSION['unseen_count'][$mbox_name] = $unseen;
}
?>
program/steps/mail/folders.inc
@@ -60,6 +60,7 @@
      $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";
@@ -67,4 +68,5 @@
}
$OUTPUT->send($commands);
?>
program/steps/mail/getunread.inc
@@ -24,9 +24,16 @@
if (!empty($a_folders))
{
  $inbox = ($IMAP->get_mailbox_name() == 'INBOX');
  foreach ($a_folders as $mbox_row)
    $OUTPUT->command('set_unread_count', $mbox_row, $IMAP->messagecount($mbox_row, 'UNSEEN'), $inbox && $mbox_row == 'INBOX');
  foreach ($a_folders as $mbox_row) {
    $unseen = $IMAP->messagecount($mbox_row, 'UNSEEN', !isset($_SESSION['unseen_count'][$mbox_row]));
    $_SESSION['unseen_count'][$mbox_row] = $unseen;
    if ($unseen) {
      $OUTPUT->command('set_unread_count', $mbox_row, $unseen, $inbox && $mbox_row == 'INBOX');
    }
  }
}
$OUTPUT->send();
?>
program/steps/mail/list.inc
@@ -60,7 +60,14 @@
if ($count = $IMAP->messagecount($mbox_name, 'ALL', !empty($_REQUEST['_refresh'])))
  $a_headers = $IMAP->list_headers($mbox_name, NULL, $sort_col, $sort_order);
// count UNSEEN messages...
$old_unseen = $_SESSION['unseen_count'][$mbox_name];
$unseen = $count ? $IMAP->messagecount($mbox_name, 'UNSEEN', !empty($_REQUEST['_refresh'])) : 0;
$_SESSION['unseen_count'][$mbox_name] = $unseen;
// ...and update mailboxlist
if ($unseen != $old_unseen)
  $OUTPUT->command('set_unread_count', $mbox_name, $unseen, ($mbox_name == 'INBOX'));
// update message count display
$pages = ceil($count/$IMAP->page_size);
@@ -80,9 +87,6 @@
  $OUTPUT->show_message('searchnomatch', 'notice');
else
  $OUTPUT->show_message('nomessagesfound', 'notice');
// update mailboxlist
$OUTPUT->command('set_unread_count', $mbox_name, $unseen, ($mbox_name == 'INBOX'));
// send response
$OUTPUT->send();
program/steps/mail/mark.inc
@@ -62,7 +62,12 @@
    
  if ($flag == 'SEEN' || $flag == 'UNSEEN' || ($flag == 'DELETED' && !$CONFIG['skip_deleted'])) {
    $mbox_name = $IMAP->get_mailbox_name();
    $OUTPUT->command('set_unread_count', $mbox_name, $IMAP->messagecount($mbox_name, 'UNSEEN'), ($mbox_name == 'INBOX'));
    $unseen = $IMAP->messagecount($mbox_name, 'UNSEEN');
    $old_unseen = $_SESSION['unseen_count'][$mbox_name];
    if ($old_unseen != $unseen) {
      $OUTPUT->command('set_unread_count', $mbox_name, $unseen, ($mbox_name == 'INBOX'));
      $_SESSION['unseen_count'][$mbox_name] = $unseen;
    }
  }
  else if ($flag == 'DELETED' && $CONFIG['skip_deleted']) {
    if ($_POST['_from'] == 'show') {
@@ -96,7 +101,11 @@
      // update mailboxlist
      $mbox = $IMAP->get_mailbox_name();
      $unseen_count = $msg_count ? $IMAP->messagecount($mbox, 'UNSEEN') : 0;
      $old_unseen = $_SESSION['unseen_count'][$mbox];
      if ($old_unseen != $unseen_count) {
      $OUTPUT->command('set_unread_count', $mbox, $unseen_count, ($mbox == 'INBOX'));
    $_SESSION['unseen_count'][$mbox] = $unseen_count;
      }
      $OUTPUT->command('set_rowcount', rcmail_get_messagecount_text($msg_count));
      // add new rows from next page (if any)
program/steps/mail/move_del.inc
@@ -102,10 +102,20 @@
  // update mailboxlist
  $mbox = $IMAP->get_mailbox_name();
  $unseen_count = $msg_count ? $IMAP->messagecount($mbox, 'UNSEEN') : 0;
  $old_unseen = $_SESSION['unseen_count'][$mbox];
  if ($old_unseen != $unseen_count) {
  $OUTPUT->command('set_unread_count', $mbox, $unseen_count, ($mbox == 'INBOX'));
    $_SESSION['unseen_count'][$mbox] = $unseen_count;
  }
  if ($RCMAIL->action=='moveto' && $target) {
    $OUTPUT->command('set_unread_count', $target, $IMAP->messagecount($target, 'UNSEEN'));
    $unseen_count = $IMAP->messagecount($target, 'UNSEEN', true);
    $old_unseen = $_SESSION['unseen_count'][$target];
    if ($old_unseen != $unseen_count) {
      $OUTPUT->command('set_unread_count', $target, $unseen_count);
      $_SESSION['unseen_count'][$target] = $unseen_count;
    }
  }
  $OUTPUT->command('set_quota', rcmail_quota_content($IMAP->get_quota()));