]> code.delx.au - gnu-emacs/blobdiff - lisp/gnus/nnimap.el
; Merge from origin/emacs-25
[gnu-emacs] / lisp / gnus / nnimap.el
index 0e8fb6690828404809f4c1b3a08c43d6e0596072..2e2ec59aa5dfd255c9b4e0d5051d86345715bcc1 100644 (file)
 
 ;;; Code:
 
-(eval-and-compile
-  (require 'nnheader)
-  ;; In Emacs 24, `open-protocol-stream' is an autoloaded alias for
-  ;; `make-network-stream'.
-  (unless (fboundp 'open-protocol-stream)
-    (require 'proto-stream)))
-
 (eval-when-compile
   (require 'cl))
 
@@ -164,7 +157,8 @@ textual parts.")
     (forward "gnus-forward")))
 
 (defvar nnimap-quirks
-  '(("QRESYNC" "Zimbra" "QRESYNC ")))
+  '(("QRESYNC" "Zimbra" "QRESYNC ")
+    ("MOVE" "Dovecot" nil)))
 
 (defvar nnimap-inhibit-logging nil)
 
@@ -424,7 +418,7 @@ textual parts.")
       (when nnimap-server-port
        (push nnimap-server-port ports))
       (let* ((stream-list
-             (open-protocol-stream
+             (open-network-stream
               "*nnimap*" (current-buffer) nnimap-address
               (nnimap-map-port (car ports))
               :type nnimap-stream
@@ -920,7 +914,8 @@ textual parts.")
   t)
 
 (deffoo nnimap-request-move-article (article group server accept-form
-                                            &optional _last internal-move-group)
+                                            &optional _last
+                                            internal-move-group)
   (setq group (nnimap-decode-gnus-group group))
   (when internal-move-group
     (setq internal-move-group (nnimap-decode-gnus-group internal-move-group)))
@@ -930,17 +925,19 @@ textual parts.")
                       'nnimap-request-head
                     'nnimap-request-article)
                   article group server (current-buffer))
-      ;; If the move is internal (on the same server), just do it the easy
-      ;; way.
+      ;; If the move is internal (on the same server), just do it the
+      ;; easy way.
       (let ((message-id (message-field-value "message-id")))
        (if internal-move-group
             (with-current-buffer (nnimap-buffer)
-              (let* ((can-move (nnimap-capability "MOVE"))
-                    (command (if can-move
-                                 "UID MOVE %d %S"
-                               "UID COPY %d %S"))
-                    (result (nnimap-command command article
-                                            (utf7-encode internal-move-group t))))
+              (let* ((can-move (and (nnimap-capability "MOVE")
+                                   (equal (nnimap-quirk "MOVE") "MOVE")))
+                    (command (if can-move
+                                 "UID MOVE %d %S"
+                               "UID COPY %d %S"))
+                    (result (nnimap-command
+                             command article
+                             (utf7-encode internal-move-group t))))
                 (when (and (car result) (not can-move))
                   (nnimap-delete-article article))
                 (cons internal-move-group
@@ -949,11 +946,10 @@ textual parts.")
                            internal-move-group server message-id
                            nnimap-request-articles-find-limit)))))
          ;; Move the article to a different method.
-         (let ((result (eval accept-form)))
-           (when result
-             (nnimap-change-group group server)
-             (nnimap-delete-article article)
-             result)))))))
+         (when-let ((result (eval accept-form)))
+           (nnimap-change-group group server)
+           (nnimap-delete-article article)
+           result))))))
 
 (deffoo nnimap-request-expire-articles (articles group &optional server force)
   (setq group (nnimap-decode-gnus-group group))
@@ -1001,7 +997,8 @@ textual parts.")
       (and (nnimap-change-group group server)
           (with-current-buffer (nnimap-buffer)
             (nnheader-message 7 "Expiring articles from %s: %s" group articles)
-             (let ((can-move (nnimap-capability "MOVE")))
+             (let ((can-move (and (nnimap-capability "MOVE")
+                                 (equal (nnimap-quirk "MOVE") "MOVE"))))
                (nnimap-command
                 (if can-move
                     "UID MOVE %s %S"
@@ -2072,7 +2069,8 @@ Return the server's response to the SELECT or EXAMINE command."
                                  nnmail-split-fancy))
          (nnmail-inhibit-default-split-group t)
          (groups (nnimap-get-groups))
-          (can-move (nnimap-capability "MOVE"))
+          (can-move (and (nnimap-capability "MOVE")
+                        (equal (nnimap-quirk "MOVE") "MOVE")))
          new-articles)
       (erase-buffer)
       (nnimap-command "SELECT %S" nnimap-inbox)