lisp/gnus/nnir.el Check for literal+ capability in IMAP

This commit is contained in:
Lars Magne Ingebrigtsen 2015-01-27 06:06:43 +00:00 committed by Katsumi Yamaoka
parent 4f2ca8e550
commit b28c81bcf2
2 changed files with 29 additions and 23 deletions

View file

@ -1,3 +1,8 @@
2015-01-27 Lars Ingebrigtsen <larsi@gnus.org>
* nnir.el (nnir-imap-expr-to-imap): Check for literal+ capability in
IMAP.
2015-01-27 Eric Abrahamsen <eric@ericabrahamsen.net>
* nnir.el (nnir-run-imap): Enable non-ASCII IMAP searches.

View file

@ -1069,29 +1069,30 @@ In future the following will be added to the language:
(defun nnir-imap-expr-to-imap (criteria expr)
"Convert EXPR into an IMAP search expression on CRITERIA"
;; What sort of expression is this, eh?
(cond
;; Simple string term
((stringp expr)
(format "%s %S" criteria expr))
;; Trivial term: and
((eq expr 'and) nil)
;; Composite term: or expression
((eq (car-safe expr) 'or)
(format "OR %s %s"
(nnir-imap-expr-to-imap criteria (second expr))
(nnir-imap-expr-to-imap criteria (third expr))))
;; Composite term: just the fax, mam
((eq (car-safe expr) 'not)
(format "NOT (%s)" (nnir-imap-query-to-imap criteria (rest expr))))
;; Composite term: non-ascii search term
((numberp (car-safe expr))
(format "%s {%d%s}\n%s" criteria (car expr)
(if literal+ "+" "") (second expr)))
;; Composite term: just expand it all.
((and (not (null expr)) (listp expr))
(format "(%s)" (nnir-imap-query-to-imap criteria expr)))
;; Complex value, give up for now.
(t (error "Unhandled input: %S" expr))))
(let ((literal+ (nnimap-capability "LITERAL+")))
(cond
;; Simple string term
((stringp expr)
(format "%s %S" criteria expr))
;; Trivial term: and
((eq expr 'and) nil)
;; Composite term: or expression
((eq (car-safe expr) 'or)
(format "OR %s %s"
(nnir-imap-expr-to-imap criteria (second expr))
(nnir-imap-expr-to-imap criteria (third expr))))
;; Composite term: just the fax, mam
((eq (car-safe expr) 'not)
(format "NOT (%s)" (nnir-imap-query-to-imap criteria (rest expr))))
;; Composite term: non-ascii search term
((numberp (car-safe expr))
(format "%s {%d%s}\n%s" criteria (car expr)
(if literal+ "+" "") (second expr)))
;; Composite term: just expand it all.
((and (not (null expr)) (listp expr))
(format "(%s)" (nnir-imap-query-to-imap criteria expr)))
;; Complex value, give up for now.
(t (error "Unhandled input: %S" expr)))))
(defun nnir-imap-parse-query (string)