:type 'directory
:group 'elmo)
+(defconst elmo-maildir-flag-specs '((important ?F)
+ (read ?S)
+ (unread ?S 'remove)
+ (answered ?R)))
+
;;; ELMO Maildir folder
(eval-and-compile
(luna-define-class elmo-maildir-folder
(elmo-maildir-folder-set-answered-locations-internal folder (nth 3 locs))
(nth 0 locs)))
-(luna-define-method elmo-map-folder-list-unreads
- ((folder elmo-maildir-folder))
- (elmo-maildir-folder-unread-locations-internal folder))
-
-(luna-define-method elmo-map-folder-list-importants
- ((folder elmo-maildir-folder))
- (elmo-maildir-folder-flagged-locations-internal folder))
-
-(luna-define-method elmo-map-folder-list-answereds
- ((folder elmo-maildir-folder))
- (elmo-maildir-folder-answered-locations-internal folder))
+(luna-define-method elmo-map-folder-list-flagged ((folder elmo-maildir-folder)
+ flag)
+ (case flag
+ (unread
+ (elmo-maildir-folder-unread-locations-internal folder))
+ (important
+ (elmo-maildir-folder-flagged-locations-internal folder))
+ (answered
+ (elmo-maildir-folder-answered-locations-internal folder))
+ (otherwise
+ t)))
(luna-define-method elmo-folder-msgdb-create ((folder elmo-maildir-folder)
numbers flag-table)
(dolist (number numbers)
(setq location (elmo-map-message-location folder number))
(setq entity
- (elmo-msgdb-create-overview-entity-from-file
+ (elmo-msgdb-create-message-entity-from-file
+ (elmo-msgdb-message-entity-handler new-msgdb)
number
(elmo-maildir-message-file-name folder location)))
(when entity
folder))))
(unless (memq 'unread flags)
(setq flags (delq 'new flags)))
+ (elmo-global-flags-set flags folder number message-id)
(elmo-msgdb-append-entity new-msgdb entity flags)
(when (> len elmo-display-progress-threshold)
(setq i (1+ i))
mark))
t)
-(luna-define-method elmo-map-folder-mark-as-important ((folder elmo-maildir-folder)
- locs)
- (elmo-maildir-set-mark-msgs folder locs ?F))
-
-(luna-define-method elmo-map-folder-unmark-important ((folder elmo-maildir-folder)
- locs)
- (elmo-maildir-delete-mark-msgs folder locs ?F))
-
-(luna-define-method elmo-map-folder-mark-as-read ((folder elmo-maildir-folder)
- locs)
- (elmo-maildir-set-mark-msgs folder locs ?S))
-
-(luna-define-method elmo-map-folder-unmark-read ((folder elmo-maildir-folder)
- locs)
- (elmo-maildir-delete-mark-msgs folder locs ?S))
-
-(luna-define-method elmo-map-folder-mark-as-answered ((folder
- elmo-maildir-folder)
- locs)
- (elmo-maildir-set-mark-msgs folder locs ?R))
-
-(luna-define-method elmo-map-folder-unmark-answered ((folder
- elmo-maildir-folder)
- locs)
- (elmo-maildir-delete-mark-msgs folder locs ?R))
+(defsubst elmo-maildir-set-mark-messages (folder locations mark remove)
+ (when mark
+ (if remove
+ (elmo-maildir-delete-mark-msgs folder locations mark)
+ (elmo-maildir-set-mark-msgs folder locations mark))))
+
+(luna-define-method elmo-map-folder-set-flag ((folder elmo-maildir-folder)
+ locations flag)
+ (let ((spec (cdr (assq flag elmo-maildir-flag-specs))))
+ (when spec
+ (elmo-maildir-set-mark-messages folder locations
+ (car spec) (nth 1 spec)))))
+
+(luna-define-method elmo-map-folder-unset-flag ((folder elmo-maildir-folder)
+ locations flag)
+ (let ((spec (cdr (assq flag elmo-maildir-flag-specs))))
+ (when spec
+ (elmo-maildir-set-mark-messages folder locations
+ (car spec) (not (nth 1 spec))))))
(luna-define-method elmo-folder-list-subfolders
((folder elmo-maildir-folder) &optional one-level)
filename))
(luna-define-method elmo-folder-append-buffer ((folder elmo-maildir-folder)
- &optional status number)
+ &optional flags number)
(let ((basedir (elmo-maildir-folder-directory-internal folder))
(src-buf (current-buffer))
dst-buf filename)
(expand-file-name
(concat "new/" (file-name-nondirectory filename))
basedir))
+ (elmo-folder-preserve-flags
+ folder (elmo-msgdb-get-message-id-from-buffer) flags)
t)
;; If an error occured, return nil.
(error))))
(if (elmo-folder-message-file-p src-folder)
(let ((src-msgdb-exists (not (zerop (elmo-folder-length src-folder))))
(dir (elmo-maildir-folder-directory-internal folder))
- (table (elmo-flag-table-load (elmo-folder-msgdb-path folder)))
+ (table (elmo-folder-flag-table folder))
(succeeds numbers)
filename flags id)
(dolist (number numbers)
(elmo-flag-table-set table id flags))
(elmo-progress-notify 'elmo-folder-move-messages))
(when (elmo-folder-persistent-p folder)
- (elmo-flag-table-save (elmo-folder-msgdb-path folder) table))
+ (elmo-folder-close-flag-table folder))
succeeds)
(luna-call-next-method)))