(or (elmo-folder-msgdb-internal folder)
(elmo-folder-set-msgdb-internal folder
(elmo-msgdb-load folder))))
+
(luna-define-generic elmo-folder-open (folder &optional load-msgdb)
"Open and setup (load saved status) FOLDER.
If optional LOAD-MSGDB is non-nil, msgdb is loaded.
(luna-define-generic elmo-folder-reserve-status-p (folder)
"If non-nil, the folder should not close folder after `elmo-folder-status'.")
+(luna-define-generic elmo-folder-set-message-modified (folder modified)
+ "Set FOLDER as modified.")
+(luna-define-method elmo-folder-set-message-modified ((folder elmo-folder)
+ modified)
+ (elmo-folder-set-message-modified-internal folder modified))
+
(luna-define-generic elmo-folder-list-messages (folder &optional visible-only
in-msgdb)
"Return a list of message numbers contained in FOLDER.
(luna-define-generic elmo-folder-process-crosspost (folder)
"Process crosspost for FOLDER.
-If NUMBER-ALIST is set, it is used as number-alist.
Return a cons cell of (NUMBER-CROSSPOSTS . NEW-MARK-ALIST).")
-(luna-define-generic elmo-folder-append-msgdb (folder append-msgdb)
- "Append APPEND-MSGDB to the current msgdb of the folder.")
-
(luna-define-generic elmo-folder-newsgroups (folder)
"Return list of newsgroup name of FOLDER.")
(elmo-folder-set-info-max-by-numdb
folder
(elmo-folder-list-messages folder nil 'in-msgdb))
- (elmo-folder-set-message-modified-internal folder nil)
+ (elmo-folder-set-message-modified folder nil)
(elmo-msgdb-killed-list-save
(elmo-folder-msgdb-path folder)
(elmo-folder-killed-list-internal folder)))
;; List all message entities in the FOLDER.
(mapcar
(lambda (number) (elmo-message-entity folder number))
- (elmo-folder-list-messages folder t t)))
+ (elmo-folder-list-messages folder nil t))) ; XXX killed-list is not used.
(defmacro elmo-folder-do-each-message-entity (spec &rest form)
"Iterator for message entity in the folder.
;; flag-table)
;; "Append ENTITY to the folder.")
-(defun elmo-generic-folder-append-msgdb (folder append-msgdb)
+(defsubst elmo-folder-append-msgdb (folder append-msgdb)
(if append-msgdb
- (let* ((number-alist (elmo-msgdb-get-number-alist append-msgdb))
- (all-alist (copy-sequence (append
- (elmo-msgdb-get-number-alist
- (elmo-folder-msgdb folder))
- number-alist)))
- (cur number-alist)
- pair overview
- to-be-deleted
- mark-alist)
- (elmo-folder-set-msgdb-internal folder
- (elmo-msgdb-append
- (elmo-folder-msgdb folder)
- append-msgdb))
- (while cur
- (setq all-alist (delq (car cur) all-alist))
- ;; same message id exists.
- (if (setq pair (rassoc (cdr (car cur)) all-alist))
- (setq to-be-deleted (nconc to-be-deleted (list (car pair)))))
- (setq cur (cdr cur)))
+ (let ((duplicates (elmo-msgdb-merge folder append-msgdb)))
(cond ((eq (elmo-folder-process-duplicates-internal folder)
'hide)
- ;; Hide duplicates.
- (setq overview (elmo-delete-if
- (lambda (x)
- (memq (elmo-msgdb-overview-entity-get-number
- x)
- to-be-deleted))
- (elmo-msgdb-get-overview append-msgdb)))
+ ;; Let duplicates be a temporary killed message.
+ (elmo-folder-kill-messages folder duplicates)
;; Should be mark as read.
- (elmo-folder-mark-as-read folder to-be-deleted)
- (elmo-msgdb-set-overview append-msgdb overview))
+ (elmo-folder-mark-as-read folder duplicates))
((eq (elmo-folder-process-duplicates-internal folder)
'read)
;; Mark as read duplicates.
- (elmo-folder-mark-as-read folder to-be-deleted))
+ (elmo-folder-mark-as-read folder duplicates))
(t
;; Do nothing.
- (setq to-be-deleted nil)))
- (length to-be-deleted))
+ (setq duplicates nil)))
+ (length duplicates))
0))
-(luna-define-method elmo-folder-append-msgdb ((folder elmo-folder)
- append-msgdb)
- (elmo-generic-folder-append-msgdb folder append-msgdb))
-
(defun elmo-folder-confirm-appends (appends)
(let ((len (length appends))
in)
no-check)
(let ((killed-list (elmo-folder-killed-list-internal folder))
(before-append t)
- number-alist
old-msgdb diff diff-2 delete-list new-list new-msgdb mark
flag-table crossed after-append)
(setq old-msgdb (elmo-folder-msgdb folder))
;; process crosspost.
;; Return a cons cell of (NUMBER-CROSSPOSTS . NEW-MARK-ALIST).
(elmo-folder-process-crosspost folder)
- (elmo-folder-set-message-modified-internal folder t)
+ (elmo-folder-set-message-modified folder t)
(elmo-folder-set-mark-modified-internal folder t))
;; return value.
(or crossed 0)))