diff options
| -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);      }  | 
