(luna-define-generic elmo-message-file-p (folder number)
"Return t if message in the FOLDER with NUMBER is a file.")
-(luna-define-generic elmo-message-flags (folder number)
+(luna-define-generic elmo-message-flags (folder number &optional msgid)
"Return a list of flags.
FOLDER is a ELMO folder structure.
-NUMBER is a number of the message.")
-
-(luna-define-method elmo-message-flags ((folder elmo-folder) number)
- (elmo-msgdb-flags (elmo-folder-msgdb folder) number))
+NUMBER is a number of the message.
+If optional argument MSGID is specified,
+the message with NUMBER checks whether it has MSGID.")
+
+(luna-define-method elmo-message-flags ((folder elmo-folder) number
+ &optional msgid)
+ (if msgid
+ (let ((this-id (elmo-message-field folder number 'message-id)))
+ (and this-id
+ (string= this-id msgid)
+ (or (elmo-msgdb-flags (elmo-folder-msgdb folder) number)
+ '(read))))
+ (elmo-msgdb-flags (elmo-folder-msgdb folder) number)))
(defsubst elmo-message-flagged-p (folder number flag)
"Return non-nil if the message is set FLAG.
(elmo-folder-flag-table folder))
(elmo-folder-set-flag-table-internal folder nil))
-(defun elmo-folder-preserve-falgs (folder msgid flags)
+(defun elmo-folder-preserve-flags (folder msgid flags)
"Preserve FLAGS into FOLDER for a message that has MSGID."
(when (and msgid flags)
(let ((flag-table (elmo-folder-flag-table folder 'if-exists))
(defun elmo-generic-folder-append-messages (folder src-folder numbers
same-number)
(let ((src-msgdb-exists (not (zerop (elmo-folder-length src-folder))))
- unseen table flags
+ unseen table
succeed-numbers failure cache id)
(setq table (elmo-folder-flag-table folder))
(with-temp-buffer
(setq failure nil
id (and src-msgdb-exists
(elmo-message-field src-folder (car numbers)
- 'message-id))
- flags (or (elmo-message-flags src-folder (car numbers))
- (and id '(read))))
+ 'message-id)))
(condition-case nil
(setq cache (elmo-file-cache-get id)
failure
(> (buffer-size) 0)
(elmo-folder-append-buffer
folder
- flags
+ (elmo-message-flags
+ src-folder
+ (car numbers)
+ (elmo-msgdb-get-message-id-from-buffer))
(if same-number (car numbers))))))
(error (setq failure t)))
;; FETCH & APPEND finished