* wl-vars.el (wl-summary-print-argument-within-window): New variable.
[elisp/wanderlust.git] / elmo / elmo.el
index b800a05..cb66c79 100644 (file)
@@ -156,6 +156,7 @@ If optional argument NON-PERSISTENT is non-nil, the folder msgdb is not saved."
   (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.
@@ -204,6 +205,12 @@ Return value is cons cell or list:
 (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.
@@ -620,12 +627,8 @@ FIELD is a symbol of the field name.")
 
 (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.")
 
@@ -682,7 +685,7 @@ Return a cons cell of (NUMBER-CROSSPOSTS . NEW-MARK-ALIST).")
       (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)))
@@ -1171,7 +1174,7 @@ ENTITY is the message-entity to get the parent.")
   ;; 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.
@@ -1332,53 +1335,25 @@ FIELD is a symbol of the field.")
 ;;                                                            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)
@@ -1499,7 +1474,6 @@ If update process is interrupted, return nil.")
                                             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))
@@ -1554,7 +1528,7 @@ If update process is interrupted, return nil.")
              ;; 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)))