소스 검색

don't issue imap commands when target mailbox is same as source mailbox.
reduces number of imap calls and fixes mailbox caching issues (message is
not visible on message list until cache is updated).
might fix imap server locking on MacOS cyrus (#1409453).

tokul 19 년 전
부모
커밋
c5c93fb8cc
2개의 변경된 파일7개의 추가작업 그리고 2개의 파일을 삭제
  1. 6 1
      functions/imap_messages.php
  2. 1 1
      functions/mailbox_display.php

+ 6 - 1
functions/imap_messages.php

@@ -39,9 +39,14 @@ function sqimap_msgs_list_copy($imap_stream, $id, $mailbox, $handle_errors = tru
  * @param string $id The list of messages to move
  * @param string $mailbox The destination to move to
  * @param bool $handle_errors Show error messages in case of a NO, BAD or BYE response
+ * @param string $source_mailbox (since 1.5.1) name of source mailbox. It is used to 
+ *  validate that target mailbox != source mailbox.
  * @return bool If the move completed without errors
  */
-function sqimap_msgs_list_move($imap_stream, $id, $mailbox, $handle_errors = true) {
+function sqimap_msgs_list_move($imap_stream, $id, $mailbox, $handle_errors = true, $source_mailbox = false) {
+    if ($source_mailbox!==false && $source_mailbox==$mailbox) {
+        return false;
+    }
     $msgs_id = sqimap_message_list_squisher($id);
     if (sqimap_msgs_list_copy ($imap_stream, $id, $mailbox, $handle_errors)) {
         return sqimap_toggle_flag($imap_stream, $id, '\\Deleted', true, true);

+ 1 - 1
functions/mailbox_display.php

@@ -1270,7 +1270,7 @@ function handleMessageListForm($imapConnection,&$aMailbox,$sButton='',$aUid = ar
             $aUpdatedMsgs = sqimap_toggle_flag($imapConnection, $aUid, $sFlag, $bSet, true);
             break;
           case 'move':
-            $aUpdatedMsgs = sqimap_msgs_list_move($imapConnection,$aUid,$targetMailbox);
+            $aUpdatedMsgs = sqimap_msgs_list_move($imapConnection,$aUid,$targetMailbox,true,$mailbox);
             sqsession_register($targetMailbox,'lastTargetMailbox');
             $bExpunge = true;
             break;