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))))))