Function: nnir-run-imap
nnir-run-imap is a byte-compiled function defined in nnir.el.gz.
Signature
(nnir-run-imap QUERY SRV &optional GROUPS)
Documentation
Run the QUERY search against an IMAP back-end server SRV.
Search GROUPS, or all active groups on SRV if GROUPS is nil.
This uses a custom query language parser; see
nnir-imap-make-query for details on the language and supported
extensions.
Source Code
;; Defined in /usr/src/emacs/lisp/obsolete/nnir.el.gz
;; imap interface
(defun nnir-run-imap (query srv &optional groups)
"Run the QUERY search against an IMAP back-end server SRV.
Search GROUPS, or all active groups on SRV if GROUPS is nil.
This uses a custom query language parser; see
`nnir-imap-make-query' for details on the language and supported
extensions."
(save-excursion
(let ((qstring (cdr (assq 'query query)))
(server (cadr (gnus-server-to-method srv)))
(criteria (or (cdr (assq 'criteria query))
(cdr (assoc nnir-imap-default-search-key
nnir-imap-search-arguments))))
(gnus-inhibit-demon t)
(groups
(or groups (gnus-server-get-active srv nnir-ignored-newsgroups))))
(message "Opening server %s" server)
(apply
#'vconcat
(catch 'found
(mapcar
#'(lambda (group)
(let (artlist)
(condition-case ()
(when (nnimap-change-group
(gnus-group-short-name group) server)
(with-current-buffer (nnimap-buffer)
(message "Searching %s..." group)
(let ((arts 0)
(result (nnimap-command "UID SEARCH %s"
(if (string= criteria "")
qstring
(nnir-imap-make-query
criteria qstring)))))
(mapc
(lambda (artnum)
(let ((artn (string-to-number artnum)))
(when (> artn 0)
(push (vector group artn 100)
artlist)
(when (assq 'shortcut query)
(throw 'found (list artlist)))
(setq arts (1+ arts)))))
(and (car result)
(cdr (assoc "SEARCH" (cdr result)))))
(message "Searching %s... %d matches" group arts)))
(message "Searching %s...done" group))
(quit nil))
(nreverse artlist)))
groups))))))