(defvar elmo-imap4-disuse-server-flag-mailbox-regexp "^#mh" ; UW imapd
"Regexp to match IMAP4 mailbox names whose message flags on server should be ignored.
-(Except `\\Deleted' flag).")
+\(Except `\\Deleted' flag\).")
(defvar elmo-imap4-overview-fetch-chop-length 200
"*Number of overviews to fetch in one request.")
(defvar elmo-imap4-use-select-to-update-status nil
"*Some imapd have to send select command to update status.
-(ex. UW imapd 4.5-BETA?). For these imapd, you must set this variable t.")
+\(ex. UW imapd 4.5-BETA?\). For these imapd, you must set this variable t.")
(defvar elmo-imap4-use-modified-utf7 nil
"*Use mofidied UTF-7 (rfc2060) encoding for IMAP4 folder name.")
(defvar elmo-imap4-extra-namespace-alist
'(("^\\({.*/nntp}\\).*$" . ".")) ; Default is for UW's remote nntp mailbox...
- "Extra namespace alist.
+ "Extra namespace alist.
A list of cons cell like: (REGEXP . DELIMITER).
REGEXP should have a grouping for namespace prefix.")
;;
"Returns non-nil if RESPONSE is an 'BYE' response."
(` (assq 'bye (, response))))
+(defmacro elmo-imap4-response-garbage-p (response)
+ "Returns non-nil if RESPONSE is an 'garbage' response."
+ (` (assq 'garbage (, response))))
+
(defmacro elmo-imap4-response-value (response symbol)
"Get value of the SYMBOL from RESPONSE."
(` (nth 1 (assq (, symbol) (, response)))))
(with-current-buffer (process-buffer
(elmo-network-session-process-internal session))
(while (not (or (string= tag elmo-imap4-reached-tag)
- (elmo-imap4-response-bye-p elmo-imap4-current-response)))
+ (elmo-imap4-response-bye-p elmo-imap4-current-response)
+ (when (elmo-imap4-response-garbage-p
+ elmo-imap4-current-response)
+ (message "Garbage response: %s"
+ (elmo-imap4-response-value
+ elmo-imap4-current-response
+ 'garbage))
+ t)))
(when (memq (process-status
(elmo-network-session-process-internal session))
'(open run))
;;
;; app-data:
-;; cons of seen-list and result of use-flag-p.
+;; cons of list
+;; 0: new-mark 1: already-mark 2: seen-mark 3: important-mark
+;; 4: seen-list
+;; and result of use-flag-p.
(defsubst elmo-imap4-fetch-callback-1-subr (entity flags app-data)
"A msgdb entity callback function."
(let* ((use-flag (cdr app-data))
(app-data (car app-data))
- (seen (member (car entity) app-data))
+ (seen (member (car entity) (nth 4 app-data)))
mark)
(if (member "\\Flagged" flags)
- (elmo-msgdb-global-mark-set (car entity)
- elmo-msgdb-important-mark))
+ (elmo-msgdb-global-mark-set (car entity) (nth 3 app-data)))
(if (setq mark (elmo-msgdb-global-mark-get (car entity)))
(unless (member "\\Seen" flags)
(setq elmo-imap4-seen-messages
(and use-flag
(member "\\Seen" flags)))
nil
- elmo-msgdb-unread-cached-mark)
+ (nth 1 app-data))
(if (or seen
(and use-flag
(member "\\Seen" flags)))
(if elmo-imap4-use-cache
- elmo-msgdb-read-uncached-mark)
- elmo-msgdb-new-mark)))))
+ (nth 2 app-data))
+ (nth 0 app-data))))))
(setq elmo-imap4-current-msgdb
(elmo-msgdb-append
elmo-imap4-current-msgdb
(message
"Unknown status data %s in mailbox %s ignored"
token mailbox))))
- status))))
+ status))
+ (skip-chars-forward " ")))
(and elmo-imap4-status-callback
(funcall elmo-imap4-status-callback
status
((folder elmo-imap4-folder))
(elmo-imap4-list folder "flagged"))
-(luna-define-method elmo-folder-list-answereds-plugged
- ((folder elmo-imap4-folder))
- (elmo-imap4-list folder "answered"))
-
(luna-define-method elmo-folder-use-flag-p ((folder elmo-imap4-folder))
(not (string-match elmo-imap4-disuse-server-flag-mailbox-regexp
(elmo-imap4-folder-mailbox-internal folder))))
(let* ((root (elmo-imap4-folder-mailbox-internal folder))
(session (elmo-imap4-get-session folder))
(prefix (elmo-folder-prefix-internal folder))
- (delim (or
- (cdr
+ (namespace-assoc
(elmo-string-matched-assoc
root
(with-current-buffer (elmo-network-session-buffer session)
elmo-imap4-server-namespace)))
+ (delim (or (cdr namespace-assoc)
elmo-imap4-default-hierarchy-delimiter))
;; Append delimiter when root with namespace.
- (root (if (and (match-end 1)
+ (root (if (and namespace-assoc
+ (match-end 1)
(string= (substring root (match-end 1))
""))
(concat root delim)
(defun elmo-imap4-search-internal-primitive (folder session filter from-msgs)
(let ((search-key (elmo-filter-key filter))
(imap-search-keys '("bcc" "body" "cc" "from" "subject" "to"
- "larger" "smaller" "mark"))
+ "larger" "smaller"))
(total 0)
(length (length from-msgs))
charset set-list end results)
numbers)))
(mapcar '(lambda (x) (delete x numbers)) rest)
numbers))
- ((string= "mark" search-key)
- (cond
- ((string= "unread" (elmo-filter-value filter))
- (elmo-folder-list-unreads folder))
- ((string= "important" (elmo-filter-value filter))
- (elmo-folder-list-importants folder))
- ((string= "answered" (elmo-filter-value filter))
- (elmo-folder-list-answereds folder))))
((or (string= "since" search-key)
(string= "before" search-key))
(setq search-key (concat "sent" search-key)
(luna-call-next-method)))
(luna-define-method elmo-folder-msgdb-create-plugged
- ((folder elmo-imap4-folder) numbers seen-list)
+ ((folder elmo-imap4-folder) numbers &rest args)
(when numbers
(let ((session (elmo-imap4-get-session folder))
(headers
(setq elmo-imap4-current-msgdb nil
elmo-imap4-seen-messages nil
elmo-imap4-fetch-callback 'elmo-imap4-fetch-callback-1
- elmo-imap4-fetch-callback-data (cons seen-list
+ elmo-imap4-fetch-callback-data (cons args
(elmo-folder-use-flag-p
folder)))
(while set-list
((folder elmo-imap4-folder) numbers)
(elmo-imap4-set-flag folder numbers "\\Seen"))
-(luna-define-method elmo-folder-unmark-answered-plugged
- ((folder elmo-imap4-folder) numbers)
- (elmo-imap4-set-flag folder numbers "\\Answered" 'remove))
-
-(luna-define-method elmo-folder-mark-as-answered-plugged
- ((folder elmo-imap4-folder) numbers)
- (elmo-imap4-set-flag folder numbers "\\Answered"))
-
(luna-define-method elmo-message-use-cache-p ((folder elmo-imap4-folder)
number)
elmo-imap4-use-cache)
(elmo-net-folder-user-internal (, folder2)))))))
(luna-define-method elmo-folder-append-messages :around
- ((folder elmo-imap4-folder) src-folder numbers &optional same-number)
+ ((folder elmo-imap4-folder) src-folder numbers unread-marks
+ &optional same-number)
(if (and (eq (elmo-folder-type-internal src-folder) 'imap4)
(elmo-imap4-identical-system-p folder src-folder)
(elmo-folder-plugged-p folder))
(unless elmo-inhibit-display-retrieval-progress
(elmo-display-progress 'elmo-imap4-display-literal-progress
"Retrieving..." 100) ; remove progress bar.
- (message "Retrieving...done."))
+ (message "Retrieving...done"))
(if (setq response (elmo-imap4-response-bodydetail-text
(elmo-imap4-response-value-all
response 'fetch)))
(goto-char (point-min))
(std11-field-body (symbol-name field)))))
-(luna-define-method elmo-folder-search-requires-msgdb-p ((folder
- elmo-imap4-folder)
- condition)
- nil)
+
(require 'product)
(product-provide (provide 'elmo-imap4) (require 'elmo-version))