(setq list (elmo-msgdb-list-messages (elmo-folder-msgdb folder))))
(if visible-only
(elmo-living-messages list killed-list)
- (elmo-uniq-list
- (nconc (elmo-number-set-to-number-list killed-list) list)))))
+ (if in-msgdb
+ (elmo-uniq-list
+ (nconc (elmo-number-set-to-number-list killed-list) list)
+ #'delq)
+ list))))
(luna-define-generic elmo-folder-list-unreads (folder)
"Return a list of unread message numbers contained in FOLDER.")
FOLDER is the ELMO folder structure.
If IS-LOCAL is non-nil, only the local flag is updated.")
+(luna-define-generic elmo-folder-next-message-number (folder)
+ "The next message number that will be assigned to a new message.
+FOLDER is the ELMO folder structure.")
+
(luna-define-generic elmo-folder-append-buffer (folder &optional flag
number)
"Append current buffer as a new message.
(luna-define-method elmo-folder-contains-type ((folder elmo-folder) type)
(eq (elmo-folder-type-internal folder) type))
+(luna-define-method elmo-folder-next-message-number ((folder elmo-folder))
+ (+ 1 (elmo-max-of-list (or (elmo-folder-list-messages folder)
+ '(0)))))
+
(luna-define-method elmo-folder-append-messages ((folder elmo-folder)
src-folder
numbers
Return a list of numbers (`new' `unread' `answered')")
(luna-define-method elmo-folder-count-flags ((folder elmo-folder))
- (let ((new 0)
- (unreads 0)
- (answered 0)
- flags)
- (dolist (number (elmo-folder-list-messages folder 'visible 'in-msgdb))
- (setq flags (elmo-message-flags folder number))
- (cond
- ((memq 'new flags)
- (incf new))
- ((memq 'unread flags)
- (incf unreads))
- ((memq 'answered flags)
- (incf answered))))
- (list new unreads answered)))
+ (let* ((flag-count (elmo-msgdb-flag-count (elmo-folder-msgdb folder)))
+ (new (or (cdr (assq 'new flag-count)) 0))
+ (unread (or (cdr (assq 'unread flag-count)) 0))
+ (answered(or (cdr (assq 'answered flag-count)) 0)))
+ (list new (- unread new) answered)))
(defun elmo-message-set-flag (folder number flag &optional is-local)
"Set message flag.
FIELD is a symbol of the field.")
(luna-define-method elmo-message-field ((folder elmo-folder) number field)
- (when (zerop (elmo-folder-length folder))
- (error "Cannot treat this folder correctly."))
(elmo-message-entity-field (elmo-message-entity folder number) field))
(luna-define-method elmo-message-use-cache-p ((folder elmo-folder) number)
(or result
(and err (signal (car err) (cdr err))))))
-(defun elmo-folder-kill-messages-before (folder msg)
+(defun elmo-folder-kill-messages-range (folder beg end)
(elmo-folder-set-killed-list-internal
folder
- (list (cons 1 msg))))
+ (nconc
+ (elmo-folder-killed-list-internal folder)
+ (list (cons beg end)))))
(defun elmo-folder-kill-messages (folder numbers)
"Kill(hide) messages in the FOLDER with NUMBERS."
- (elmo-folder-set-killed-list-internal
- folder
- (elmo-number-set-append-list (elmo-folder-killed-list-internal
- folder) numbers)))
+ (let ((msgdb (elmo-folder-msgdb folder))
+ (killed (elmo-folder-killed-list-internal folder)))
+ (dolist (number numbers)
+ (elmo-number-set-append killed number)
+ (elmo-msgdb-unset-flag msgdb number 'all))
+ (elmo-folder-set-killed-list-internal folder killed)))
(luna-define-method elmo-folder-clear ((folder elmo-folder)
(when (and (not (eq (length (car diff))
(length new-list)))
(setq diff-2 (elmo-list-diff (car diff) new-list)))
- (elmo-folder-kill-messages-before folder
- (nth (- (length (car diff-2)) 1)
- (car diff-2))))
+ (elmo-folder-kill-messages-range
+ folder
+ (car (car diff-2))
+ (nth (- (length (car diff-2)) 1) (car diff-2))))
(setq delete-list (cadr diff))
(if (or (equal diff '(nil nil))
(equal diff '(nil))