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

Conflicts:
	CHANGELOG
release-1.0
Aleksander Machniak 9 years ago
parent c2e41a6dd5
commit 3aba794f70

@ -8,6 +8,7 @@ CHANGELOG Roundcube Webmail
- Fix missing or not up-to-date CATEGORIES entry in vCard export (#1490277)
- Fix duplicate entry on timezones list in rcube_config::timezone_name_from_abbr() (#1490293)
- Fix handling of %-encoded entities in mailto: URLs (#1490346)
- Fix bug where messages count was not updated after message move/delete with skip_deleted=false (#1490372)
RELEASE 1.0.5
-------------

@ -1146,7 +1146,7 @@ class rcube_imap_generic
}
// Clear internal status cache
unset($this->data['STATUS:'.$mailbox]);
$this->clear_status_cache($mailbox);
if (!empty($messages) && $messages != '*' && $this->hasCapability('UIDPLUS')) {
$messages = self::compressMessageSet($messages);
@ -1425,13 +1425,9 @@ class rcube_imap_generic
*
* @return int Number of messages, False on error
*/
function countMessages($mailbox, $refresh = false)
function countMessages($mailbox)
{
if ($refresh) {
$this->selected = null;
}
if ($this->selected === $mailbox) {
if ($this->selected === $mailbox && isset($this->data['EXISTS'])) {
return $this->data['EXISTS'];
}
@ -1459,14 +1455,20 @@ class rcube_imap_generic
*/
function countRecent($mailbox)
{
if (!strlen($mailbox)) {
$mailbox = 'INBOX';
if ($this->selected === $mailbox && isset($this->data['RECENT'])) {
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) {
return $this->data['RECENT'];
// Try STATUS (should be faster than SELECT)
$counts = $this->status($mailbox, array('RECENT'));
if (is_array($counts)) {
return (int) $counts['RECENT'];
}
return false;
@ -2085,7 +2087,7 @@ class rcube_imap_generic
// Clear internal status cache
unset($this->data['STATUS:'.$to]);
unset($this->data['STATUS:'.$from]);
$this->clear_status_cache($from);
$result = $this->execute('UID MOVE', array(
$this->compressMessageSet($messages), $this->escape($to)),
@ -3719,6 +3721,17 @@ class rcube_imap_generic
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
*

Loading…
Cancel
Save