(setq class (format "elmo-%s" (symbol-name type)))
(require (intern class))
(setq folder (luna-make-entity (intern (concat class "-folder"))
- :type type
+ :type type
:prefix prefix
:name original
:persistent (not non-persistent)))
(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.
-(otherwise, msgdb is loaded on-demand)")
+\(otherwise, msgdb is loaded on-demand)")
(luna-define-generic elmo-folder-open-internal (folder)
"Open FOLDER (without loading saved folder status).")
(luna-define-generic elmo-message-folder (folder number)
"Get primitive folder of the message.")
-(luna-define-generic elmo-folder-process-crosspost (folder
- &optional
- number-alist)
+(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).")
(setq failure nil
mark (elmo-message-mark src-folder (car numbers))
flag (cond
+ ((null mark) nil)
((member mark (elmo-msgdb-answered-marks))
'answered)
;;
(elmo-folder-close dst-folder)))
(if (and (not no-delete) succeeds)
(progn
- (if (not no-delete-info)
- (message "Cleaning up src folder..."))
(if (and (elmo-folder-delete-messages src-folder succeeds)
(elmo-msgdb-delete-msgs
(elmo-folder-msgdb src-folder) succeeds))
(message "move: delete messages from %s failed."
(elmo-folder-name-internal src-folder))
(setq result nil))
- (if (and result
- (not no-delete-info))
- (message "Cleaning up src folder...done"))
result)
(if no-delete
(progn
- (message "Copying messages...done")
+ ;; (message "Copying messages...done")
t)
(if (eq len 0)
(message "No message was moved.")
(elmo-message-use-cache-p folder number))
(elmo-folder-set-mark-modified-internal folder t)))
-;;; APIs for message-entity
-(luna-define-generic elmo-folder-list-message-entities (folder)
- "Return the all list of message-entity structure of FOLDER.")
-
-(luna-define-method elmo-folder-list-message-entities ((folder elmo-folder))
- (elmo-msgdb-get-overview (elmo-folder-msgdb folder)))
-
(luna-define-generic elmo-message-entity (folder key)
"Return the message-entity structure which matches to the KEY.
KEY is a number or a string.
(def-edebug-spec elmo-folder-do-each-message-entity
((symbolp form &rest form) &rest form))
+(defsubst elmo-folder-list-message-entities (folder)
+ ;; List all message entities in the FOLDER.
+ (mapcar
+ (lambda (number) (elmo-message-entity folder number))
+ (elmo-folder-list-messages folder t t)))
+
(defmacro elmo-folder-do-each-message-entity (spec &rest form)
"Iterator for message entity in the folder.
\(elmo-folder-do-each-message-entity \(entity folder\)
number
'answered))))
-(luna-define-method elmo-folder-process-crosspost ((folder elmo-folder)
- &optional
- number-alist)
+(luna-define-method elmo-folder-process-crosspost ((folder elmo-folder))
;; Do nothing.
)
+;;(luna-define-generic elmo-folder-append-message-entity (folder entity
+;; &optional
+;; flag-table)
+;; "Append ENTITY to the folder.")
+
(defun elmo-generic-folder-append-msgdb (folder append-msgdb)
(if append-msgdb
(let* ((number-alist (elmo-msgdb-get-number-alist append-msgdb))
(elmo-folder-set-killed-list-internal folder nil))
(elmo-folder-set-msgdb-internal folder (elmo-msgdb-clear)))
-(defun elmo-folder-synchronize (folder
- &optional ignore-msgdb
- no-check)
+(luna-define-generic elmo-folder-synchronize (folder
+ &optional ignore-msgdb
+ no-check)
"Synchronize the folder data to the newest status.
FOLDER is the ELMO folder structure.
+
If optional IGNORE-MSGDB is non-nil, current msgdb is thrown away except
flag status. If IGNORE-MSGDB is 'visible-only, only visible messages
\(the messages which are not in the killed-list\) are thrown away and
synchronized.
If NO-CHECK is non-nil, rechecking folder is skipped.
-
Return a list of a cross-posted message number.
-If update process is interrupted, return nil."
+If update process is interrupted, return nil.")
+
+(luna-define-method elmo-folder-synchronize ((folder elmo-folder)
+ &optional ignore-msgdb no-check)
(let ((killed-list (elmo-folder-killed-list-internal folder))
(before-append t)
- number-alist mark-alist
+ number-alist
old-msgdb diff diff-2 delete-list new-list new-msgdb mark
- flag-table crossed after-append)
+ flag-table crossed after-append numbers)
(setq old-msgdb (elmo-folder-msgdb folder))
(setq flag-table (elmo-flag-table-load (elmo-folder-msgdb-path folder)))
- (setq number-alist (elmo-msgdb-get-number-alist
- (elmo-folder-msgdb folder)))
- (setq mark-alist (elmo-msgdb-get-mark-alist
- (elmo-folder-msgdb folder)))
(when ignore-msgdb
(elmo-msgdb-flag-table (elmo-folder-msgdb folder) flag-table)
(elmo-folder-clear folder (eq ignore-msgdb 'visible-only)))
+ (setq numbers (sort (elmo-folder-list-messages folder nil t) '<))
(unless no-check (elmo-folder-check folder))
(condition-case nil
(progn
(setq diff (elmo-list-diff (elmo-folder-list-messages
folder
(eq 'visible-only ignore-msgdb))
- (unless ignore-msgdb
- (sort (mapcar
- 'car
- number-alist)
- '<))))
+ numbers))
(message "Checking folder diff...done")
(setq new-list (elmo-folder-confirm-appends (car diff)))
;; Set killed list.
(if delete-list (elmo-msgdb-delete-msgs
(elmo-folder-msgdb folder) delete-list))
(when new-list
- (setq new-msgdb (elmo-folder-msgdb-create
- folder new-list flag-table))
(elmo-msgdb-change-mark (elmo-folder-msgdb folder)
elmo-msgdb-new-mark
elmo-msgdb-unread-uncached-mark)
+ (setq new-msgdb (elmo-folder-msgdb-create
+ folder new-list flag-table))
;; Clear flag-table
(if (elmo-folder-persistent-p folder)
(elmo-flag-table-save (elmo-folder-msgdb-path folder)
(elmo-folder-set-killed-list-internal folder killed-list)
nil))))
-(defun elmo-folder-messages (folder)
- "Return number of messages in the FOLDER."
- (length
- (elmo-msgdb-get-number-alist
- (elmo-folder-msgdb folder))))
-
(luna-define-generic elmo-folder-length (folder)
"Return number of messages in the FOLDER.")