(t
(elmo-imap4-flag-to-imap-search-key flag))))
-(defun elmo-imap4-folder-list-flagged (folder flag)
+(defun elmo-imap4-folder-list-flagged (folder flag &optional type)
"List flagged message numbers in the FOLDER.
-FLAG is one of the `unread', `read', `important', `answered', `any'."
+FLAG is one of the `unread', `read', `important', `answered',
+`any'.
+When optional argument TYPE is symbol 'unmatch, negate search
+condition."
(let ((session (elmo-imap4-get-session folder))
- (criteria (elmo-imap4-flag-to-imap-criteria flag)))
+ (criteria (concat (if (eq type 'unmatch) "not " "")
+ (elmo-imap4-flag-to-imap-criteria flag))))
(if (elmo-imap4-session-flag-available-p session flag)
(elmo-imap4-list folder criteria)
;; List flagged messages in the msgdb.
(if (sasl-step-data step)
(elmo-base64-encode-string (sasl-step-data step)
'no-line-break)
- ""))))))))))))
+ "")))))))
+;; Some servers return reduced capabilities when client asks for them
+;; before login. It might be a good idea to ask them again, otherwise
+;; we can miss some useful feature.
+ (elmo-imap4-session-set-capability-internal
+ session
+ (elmo-imap4-response-value
+ (elmo-imap4-send-command-wait session "capability")
+ 'capability)))))))
(luna-define-method elmo-network-setup-session ((session
elmo-imap4-session))
(format "uid %s:%s" min max)))
" undeleted")))
-(luna-define-method elmo-folder-list-messages-plugged ((folder
- elmo-imap4-folder)
- &optional
- enable-killed)
-
+(luna-define-method elmo-folder-list-messages-plugged
+ ((folder elmo-imap4-folder) &optional enable-killed)
(let* ((old (elmo-msgdb-list-messages (elmo-folder-msgdb folder)))
- (new (elmo-imap4-folder-list-range folder
- (1+ (or (elmo-folder-get-info-max folder) 0)) "*"))
- (united-old-new (elmo-union old new)))
+ (new (elmo-imap4-folder-list-range
+ folder (1+ (or (elmo-folder-get-info-max folder) 0)) "*"))
+ (united-old-new (elmo-union old new)))
(if (= (length united-old-new) (or (elmo-folder-get-info-length folder) 0))
- united-old-new
+ united-old-new
(elmo-union new
(elmo-imap4-folder-list-range
folder
numbers))
((string= "flag" search-key)
(elmo-imap4-folder-list-flagged
- folder (intern (elmo-filter-value filter))))
+ folder (intern (elmo-filter-value filter)) (elmo-filter-type filter)))
((or (string= "since" search-key)
(string= "before" search-key))
(setq search-key (concat "sent" search-key)