diff options
author | alecpl <alec@alec.pl> | 2009-05-26 08:50:10 +0000 |
---|---|---|
committer | alecpl <alec@alec.pl> | 2009-05-26 08:50:10 +0000 |
commit | 8234b4c6bc3c9cd9cb639039d3080131098dd966 (patch) | |
tree | ebe4e48e55b710baac2c5392d1810e5e06b3bb5c | |
parent | d9f084ccdfe7fe61b022c4eb75a974b4cccb87a1 (diff) |
- Support UID EXPUNGE: remove only moved/deleted messages
-rw-r--r-- | CHANGELOG | 1 | ||||
-rw-r--r-- | program/include/rcube_imap.php | 17 | ||||
-rw-r--r-- | program/lib/imap.inc | 12 |
3 files changed, 22 insertions, 8 deletions
@@ -1,6 +1,7 @@ CHANGELOG RoundCube Webmail =========================== +- Support UID EXPUNGE: remove only moved/deleted messages - Add drag cancelling with ESC key (#1484344) - Support initial identity name from virtuser_query (#1484003) - Added message menu, removed Print and Source buttons diff --git a/program/include/rcube_imap.php b/program/include/rcube_imap.php index ca3551cb2..2a9a32c6f 100644 --- a/program/include/rcube_imap.php +++ b/program/include/rcube_imap.php @@ -1629,7 +1629,7 @@ class rcube_imap // but only when flag_for_deletion is set to false if (!rcmail::get_instance()->config->get('flag_for_deletion', false)) { - $this->_expunge($from_mbox, FALSE); + $this->_expunge($from_mbox, FALSE, $a_uids); $this->_clear_messagecount($from_mbox); $this->_clear_messagecount($to_mbox); } @@ -1688,7 +1688,7 @@ class rcube_imap // really deleted from the mailbox if ($deleted) { - $this->_expunge($mailbox, FALSE); + $this->_expunge($mailbox, FALSE, $a_uids); $this->_clear_messagecount($mailbox); unset($this->uid_id_map[$mailbox]); } @@ -1768,11 +1768,20 @@ class rcube_imap * Send IMAP expunge command and clear cache * * @see rcube_imap::expunge() + * @param string Mailbox name + * @param boolean False if cache should not be cleared + * @param string List of UIDs to remove, separated by comma + * @return boolean True on success * @access private */ - function _expunge($mailbox, $clear_cache=TRUE) + function _expunge($mailbox, $clear_cache=TRUE, $uids=NULL) { - $result = iil_C_Expunge($this->conn, $mailbox); + if ($uids && $this->get_capability('UIDPLUS')) + $a_uids = is_array($uids) ? join(',', $uids) : $uids; + else + $a_uids = NULL; + + $result = iil_C_Expunge($this->conn, $mailbox, $a_uids); if ($result>=0 && $clear_cache) { diff --git a/program/lib/imap.inc b/program/lib/imap.inc index 1b8bec0fb..b5412e39d 100644 --- a/program/lib/imap.inc +++ b/program/lib/imap.inc @@ -82,6 +82,7 @@ - use PREG instead of EREG - removed caching functions - handling connection startup response + - added UID EXPUNGE support ********************************************************/ @@ -1863,11 +1864,13 @@ function iil_SortHeaders($a, $field, $flag) { return $result; } -function iil_C_Expunge(&$conn, $mailbox) { +function iil_C_Expunge(&$conn, $mailbox, $messages=NULL) { if (iil_C_Select($conn, $mailbox)) { $c = 0; - iil_PutLine($conn->fp, "exp1 EXPUNGE"); + $command = $messages ? "UID EXPUNGE $messages" : "EXPUNGE"; + + iil_PutLine($conn->fp, "exp1 $command"); do { $line=chop(iil_ReadLine($conn->fp, 100)); if ($line[0] == '*') { @@ -2030,12 +2033,13 @@ function iil_C_Search(&$conn, $folder, $criteria) { } function iil_C_Move(&$conn, $messages, $from, $to) { - $fp = $conn->fp; if (!$from || !$to) { return -1; } - $r = iil_C_Copy($conn, $messages, $from,$to); + + $r = iil_C_Copy($conn, $messages, $from, $to); + if ($r==0) { return iil_C_Delete($conn, $from, $messages); } |