- (cond
- ((member location flagged-list)
- (setq file-flag 'important
- mark elmo-msgdb-important-mark))
- ((member location answered-list)
- (setq file-flag 'answered
- mark (elmo-msgdb-mark 'answered cache-status)))
- ((member location unread-list)
- (setq file-flag 'unread
- mark (elmo-msgdb-mark 'unread cache-status)))
- (t (setq file-flag 'read)))
-
- ;; Set mark according to flag-table if file status is unread or read.
- (when (or (eq file-flag 'read)
- (eq file-flag 'unread))
- ;;
- (unless (eq 'read flag)
- (setq mark (elmo-msgdb-mark flag cache-status 'new)))
- ;; Update filename's info portion according to the flag-table.
- (cond
- ((and (or (eq flag 'important)
- (setq mark (elmo-msgdb-global-mark-get
- (elmo-message-entity-field
- entity 'message-id))))
- (not (eq file-flag 'important)))
- (elmo-maildir-set-mark file ?F)
- ;; Delete from unread location list.
- (elmo-maildir-folder-set-unread-locations-internal
- folder
- (delete location
- (elmo-maildir-folder-unread-locations-internal
- folder)))
- ;; Append to flagged location list.
- (elmo-maildir-folder-set-flagged-locations-internal
- folder
- (cons location
- (elmo-maildir-folder-flagged-locations-internal
+ (when (member location flagged-list)
+ (or (memq 'important flags)
+ (setq flags (cons 'important flags))))
+ (when (member location answered-list)
+ (or (memq 'answered flags)
+ (setq flags (cons 'answered flags))))
+ (unless (member location unread-list)
+ (and (memq 'unread flags)
+ (setq flags (delq 'unread flags))))
+
+ ;; Update filename's info portion according to the flag-table.
+ (when (and (memq 'important flags)
+ (not (member location flagged-list)))
+ (elmo-maildir-set-mark
+ (elmo-maildir-message-file-name folder location)
+ ?F)
+ ;; Append to flagged location list.
+ (elmo-maildir-folder-set-flagged-locations-internal
+ folder
+ (cons location
+ (elmo-maildir-folder-flagged-locations-internal
+ folder)))
+ (setq flags (delq 'unread flags)))
+ (when (and (memq 'answered flags)
+ (not (member location answered-list)))
+ (elmo-maildir-set-mark
+ (elmo-maildir-message-file-name folder location)
+ ?R)
+ ;; Append to answered location list.
+ (elmo-maildir-folder-set-answered-locations-internal
+ folder
+ (cons location
+ (elmo-maildir-folder-answered-locations-internal folder)))
+ (setq flags (delq 'unread flags)))
+ (when (and (not (memq 'unread flags))
+ (member location unread-list))
+ (elmo-maildir-set-mark
+ (elmo-maildir-message-file-name folder location)
+ ?S)
+ ;; Delete from unread locations.
+ (elmo-maildir-folder-set-unread-locations-internal
+ folder
+ (delete location
+ (elmo-maildir-folder-unread-locations-internal