(luna-define-method elmo-folder-msgdb-create ((folder elmo-localdir-folder)
numbers
- new-mark
- already-mark
- seen-mark
- important-mark
- seen-list)
+ flag-table)
(when numbers
(let ((dir (elmo-localdir-folder-directory-internal folder))
overview number-alist mark-alist entity message-id
- num seen gmark
+ num gmark
(i 0)
(len (length numbers)))
(message "Creating msgdb...")
(elmo-msgdb-number-add number-alist
num
message-id))
- (setq seen (member message-id seen-list))
(if (setq gmark (or (elmo-msgdb-global-mark-get message-id)
- (if (elmo-file-cache-exists-p message-id) ; XXX
- (if seen
- nil
- already-mark)
- (if seen
- nil ;;seen-mark
- new-mark))))
+ (unless (eq 'read (elmo-flag-table-get
+ flag-table message-id))
+ (elmo-msgdb-mark
+ (elmo-flag-table-get flag-table message-id)
+ (elmo-file-cache-status
+ (elmo-file-cache-get message-id))
+ 'new))))
(setq mark-alist
(elmo-msgdb-mark-append
mark-alist
(luna-define-method elmo-folder-append-messages :around
((folder elmo-localdir-folder)
- src-folder numbers unread-marks &optional same-number)
+ src-folder numbers &optional same-number)
(if (elmo-folder-message-file-p src-folder)
(let ((dir (elmo-localdir-folder-directory-internal folder))
+ (table (elmo-flag-table-load (elmo-folder-msgdb-path folder)))
(succeeds numbers)
- (next-num (1+ (car (elmo-folder-status folder)))))
+ (next-num (1+ (car (elmo-folder-status folder))))
+ mark flag)
(while numbers
+ (setq mark (elmo-message-mark src-folder (car numbers))
+ flag (cond
+ ((null mark) nil)
+ ((member mark (elmo-msgdb-answered-marks))
+ 'answered)
+ ;;
+ ((not (member mark (elmo-msgdb-unread-marks)))
+ 'read)))
(elmo-copy-file
(elmo-message-file-name src-folder (car numbers))
(expand-file-name
(int-to-string
(if same-number (car numbers) next-num))
dir))
+ (elmo-flag-table-set table
+ (elmo-message-field
+ src-folder (car numbers)
+ 'message-id)
+ flag)
(elmo-progress-notify 'elmo-folder-move-messages)
(if (and (setq numbers (cdr numbers))
(not same-number))
;; MDA is running.
(1+ (car (elmo-folder-status folder)))
(1+ next-num)))))
+ (when (elmo-folder-persistent-p folder)
+ (elmo-flag-table-save (elmo-folder-msgdb-path folder) table))
succeeds)
(luna-call-next-method)))
(elmo-make-directory dir))
t)))
-(luna-define-method elmo-folder-delete :before ((folder elmo-localdir-folder))
- (let ((dir (elmo-localdir-folder-directory-internal folder)))
- (if (not (file-directory-p dir))
- (error "No such directory: %s" dir)
- (elmo-delete-match-files dir "[0-9]+" t)
+(luna-define-method elmo-folder-delete ((folder elmo-localdir-folder))
+ (let ((msgs (and (elmo-folder-exists-p folder)
+ (elmo-folder-list-messages folder))))
+ (when (yes-or-no-p (format "%sDelete msgdb and substance of \"%s\"? "
+ (if (> (length msgs) 0)
+ (format "%d msg(s) exists. " (length msgs))
+ "")
+ (elmo-folder-name-internal folder)))
+ (let ((dir (elmo-localdir-folder-directory-internal folder)))
+ (if (not (file-directory-p dir))
+ (error "No such directory: %s" dir)
+ (elmo-delete-match-files dir "[0-9]+" t)))
+ (elmo-msgdb-delete-path folder)
t)))
(luna-define-method elmo-folder-rename-internal ((folder elmo-localdir-folder)
(let* ((old (elmo-localdir-folder-directory-internal folder))
(new (elmo-localdir-folder-directory-internal new-folder))
(new-dir (directory-file-name (file-name-directory new))))
- (if (not (file-directory-p old))
- (error "No such directory: %s" old)
- (if (file-exists-p new)
- (error "Already exists directory: %s" new)
- (if (not (file-directory-p new-dir))
- (elmo-make-directory new-dir))
- (rename-file old new)
- t))))
+ (unless (file-directory-p old)
+ (error "No such directory: %s" old))
+ (when (file-exists-p new)
+ (error "Already exists directory: %s" new))
+ (unless (file-directory-p new-dir)
+ (elmo-make-directory new-dir))
+ (rename-file old new)
+ t))
(defsubst elmo-localdir-field-condition-match (folder condition
number number-list)
(elmo-msgdb-overview-get-entity onum msgdb)
new-number)
;; update number-alist
- (setcar (assq onum onum-alist) new-number))
+ (and (assq onum onum-alist)
+ (setcar (assq onum onum-alist) new-number)))
;; update mark-alist
(when (setq mark (cadr (assq onum omark-alist)))
(setq new-mark-alist