Fix bug where messages count was not updated after message move/delete with skip_deleted=false (#1490372)

pull/276/head
Aleksander Machniak 10 years ago
parent de40ef6cdb
commit 1422b0823e

@ -23,6 +23,7 @@ CHANGELOG Roundcube Webmail
- Fix bug where some unrelated attachments in multipart/related message were not listed (#1490355) - Fix bug where some unrelated attachments in multipart/related message were not listed (#1490355)
- Fix mouseup event handling when dragging a list record (#1490359) - Fix mouseup event handling when dragging a list record (#1490359)
- Fix bug where preview_pane setting wasn't always saved into user preferences (#1490362) - Fix bug where preview_pane setting wasn't always saved into user preferences (#1490362)
- Fix bug where messages count was not updated after message move/delete with skip_deleted=false (#1490372)
RELEASE 1.1.1 RELEASE 1.1.1
------------- -------------

@ -1145,7 +1145,7 @@ class rcube_imap_generic
} }
// Clear internal status cache // Clear internal status cache
unset($this->data['STATUS:'.$mailbox]); $this->clear_status_cache($mailbox);
if (!empty($messages) && $messages != '*' && $this->hasCapability('UIDPLUS')) { if (!empty($messages) && $messages != '*' && $this->hasCapability('UIDPLUS')) {
$messages = self::compressMessageSet($messages); $messages = self::compressMessageSet($messages);
@ -1460,13 +1460,9 @@ class rcube_imap_generic
* *
* @return int Number of messages, False on error * @return int Number of messages, False on error
*/ */
function countMessages($mailbox, $refresh = false) function countMessages($mailbox)
{ {
if ($refresh) { if ($this->selected === $mailbox && isset($this->data['EXISTS'])) {
$this->selected = null;
}
if ($this->selected === $mailbox) {
return $this->data['EXISTS']; return $this->data['EXISTS'];
} }
@ -1494,14 +1490,20 @@ class rcube_imap_generic
*/ */
function countRecent($mailbox) function countRecent($mailbox)
{ {
if (!strlen($mailbox)) { if ($this->selected === $mailbox && isset($this->data['RECENT'])) {
$mailbox = 'INBOX'; return $this->data['RECENT'];
} }
$this->select($mailbox); // Check internal cache
$cache = $this->data['STATUS:'.$mailbox];
if (!empty($cache) && isset($cache['RECENT'])) {
return (int) $cache['RECENT'];
}
if ($this->selected === $mailbox) { // Try STATUS (should be faster than SELECT)
return $this->data['RECENT']; $counts = $this->status($mailbox, array('RECENT'));
if (is_array($counts)) {
return (int) $counts['RECENT'];
} }
return false; return false;
@ -2122,7 +2124,7 @@ class rcube_imap_generic
// Clear internal status cache // Clear internal status cache
unset($this->data['STATUS:'.$to]); unset($this->data['STATUS:'.$to]);
unset($this->data['STATUS:'.$from]); $this->clear_status_cache($from);
$result = $this->execute('UID MOVE', array( $result = $this->execute('UID MOVE', array(
$this->compressMessageSet($messages), $this->escape($to)), $this->compressMessageSet($messages), $this->escape($to)),
@ -3760,6 +3762,17 @@ class rcube_imap_generic
return $result; return $result;
} }
/**
* Clear internal status cache
*/
protected function clear_status_cache($mailbox)
{
unset($this->data['STATUS:' . $mailbox]);
unset($this->data['EXISTS']);
unset($this->data['RECENT']);
unset($this->data['UNSEEN']);
}
/** /**
* Converts flags array into string for inclusion in IMAP command * Converts flags array into string for inclusion in IMAP command
* *

Loading…
Cancel
Save