;;; 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))
(forward "gnus-forward")))
(defvar nnimap-quirks
- '(("QRESYNC" "Zimbra" "QRESYNC ")))
+ '(("QRESYNC" "Zimbra" "QRESYNC ")
+ ("MOVE" "Dovecot" nil)))
(defvar nnimap-inhibit-logging nil)
(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
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)))
'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
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))
(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"
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)