make handle-date and handle-flag into separate functions

This commit is contained in:
Jai Flack 2022-03-30 14:33:03 +10:00
parent e29e14c710
commit cdbbce4c74
No known key found for this signature in database
GPG key ID: B0073AB365D0807D

View file

@ -107,7 +107,31 @@ This can also be set per-server."
(address (setf (car expr) 'contact)) (address (setf (car expr) 'contact))
(id (setf (car expr) 'msgid)) (id (setf (car expr) 'msgid))
(attachment (setf (car expr) 'file))) (attachment (setf (car expr) 'file)))
(cl-flet ((mu-date (date) (cl-flet ()
(cond
((consp (car expr))
(format "(%s)" (gnus-search-transform engine expr)))
;; Explicitly leave out 'date as gnus-search will encode it
;; first; it is handled later
((memq (car expr) '(cc c bcc h from f to t subject s body b
maildir m msgid i prio p flag g d
size z embed e file j mime y tag x
list v))
(format "%s:%s" (car expr)
(if (string-match "\\`\\*" (cdr expr))
(replace-match "" nil nil (cdr expr))
(cdr expr))))
((eq (car expr) 'mark)
(format "flag:%s" (gnus-search-mu-handle-flag (cdr expr))))
((eq (car expr) 'date)
(format "date:%s" (gnus-search-mu-handle-date (cdr expr))))
((eq (car expr) 'before)
(format "date:..%s" (gnus-search-mu-handle-date (cdr expr))))
((eq (car expr) 'since)
(format "date:%s.." (gnus-search-mu-handle-date (cdr expr))))
(t (ignore-errors (cl-call-next-method))))))
(defun gnus-search-mu-handle-date (date)
(if (stringp date) (if (stringp date)
date date
(pcase date (pcase date
@ -128,36 +152,15 @@ This can also be set per-server."
(format "%d-%02d" y m)) (format "%d-%02d" y m))
(`(,d ,m ,y) (`(,d ,m ,y)
(format "%d-%02d-%02d" y m d))))) (format "%d-%02d-%02d" y m d)))))
(mu-flag (flag)
(defun gnus-search-mu-handle-flag (flag)
;; Only change what doesn't match ;; Only change what doesn't match
(cond ((string= flag "flag") (cond ((string= flag "flag")
"flagged") "flagged")
((string= flag "read") ((string= flag "read")
"seen") "seen")
(t (t
flag)))) flag)))
(cond
((consp (car expr))
(format "(%s)" (gnus-search-transform engine expr)))
;; Explicitly leave out 'date as gnus-search will encode it
;; first; it is handled later
((memq (car expr) '(cc c bcc h from f to t subject s body b
maildir m msgid i prio p flag g d
size z embed e file j mime y tag x
list v))
(format "%s:%s" (car expr)
(if (string-match "\\`\\*" (cdr expr))
(replace-match "" nil nil (cdr expr))
(cdr expr))))
((eq (car expr) 'mark)
(format "flag:%s" (mu-flag (cdr expr))))
((eq (car expr) 'date)
(format "date:%s" (mu-date (cdr expr))))
((eq (car expr) 'before)
(format "date:..%s" (mu-date (cdr expr))))
((eq (car expr) 'since)
(format "date:%s.." (mu-date (cdr expr))))
(t (ignore-errors (cl-call-next-method))))))
(cl-defmethod gnus-search-indexed-extract ((_engine gnus-search-mu)) (cl-defmethod gnus-search-indexed-extract ((_engine gnus-search-mu))