(cdr (assoc "SEARCH" (cdr result))))))))))
-(defun nnimap-find-article-by-message-id (group server message-id &optional limit)
- "Search for message with MESSAGE-ID in GROUP from SERVER.
-If LIMIT, first try to limit the search to the N last articles."
+(defun nnimap-find-article-by-message-id (group server message-id)
+ "Search for message with MESSAGE-ID in GROUP from SERVER."
(with-current-buffer (nnimap-buffer)
(erase-buffer)
- (let* ((number-of-article
- (catch 'found
- (dolist (result (cdr (nnimap-change-group group server nil t)))
- (when (equal "EXISTS" (cadr result))
- (throw 'found (car result))))))
- (sequence
- (nnimap-send-command "UID SEARCH%s HEADER Message-Id %S"
- (if (and limit number-of-article)
- ;; The -1 is because IMAP message
- ;; numbers are one-based rather than
- ;; zero-based.
- (format " %s:*" (- (string-to-number number-of-article) limit -1))
- "")
- message-id)))
- (when (nnimap-wait-for-response sequence)
- (let ((article (car (last (cdr (assoc "SEARCH" (nnimap-parse-response)))))))
- (if article
- (string-to-number article)
- (when (and limit number-of-article)
- (nnimap-find-article-by-message-id group server message-id))))))))
+ (nnimap-change-group group server nil t)
+ (let ((sequence
+ (nnimap-send-command "UID SEARCH HEADER Message-Id %S" message-id))
+ article result)
+ (setq result (nnimap-wait-for-response sequence))
+ (when (and result
+ (car (setq result (nnimap-parse-response))))
+ ;; Select the last instance of the message in the group.
+ (and (setq article
+ (car (last (cdr (assoc "SEARCH" (cdr result))))))
+ (string-to-number article))))))
(defun nnimap-delete-article (articles)
(with-current-buffer (nnimap-buffer)