* elmo.el (elmo-generic-folder-append-messages): Set flag as nil
[elisp/wanderlust.git] / elmo / elmo-archive.el
index 6aa1969..2fb1c3c 100644 (file)
@@ -447,12 +447,20 @@ TYPE specifies the archiver's symbol."
             (delete-file dummy)))
        ))))
 
-(luna-define-method elmo-folder-delete :before ((folder elmo-archive-folder))
-  (let ((arc (elmo-archive-get-archive-name folder)))
-    (if (not (file-exists-p arc))
-       (error "No such file: %s" arc)
-      (delete-file arc)
-      t)))
+(luna-define-method elmo-folder-delete ((folder elmo-archive-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 ((arc (elmo-archive-get-archive-name folder)))
+       (if (not (file-exists-p arc))
+           (error "No such file: %s" arc)
+         (delete-file arc))
+       (elmo-msgdb-delete-path folder)
+       t))))
 
 (luna-define-method elmo-folder-rename-internal ((folder elmo-archive-folder)
                                                 new-folder)
@@ -469,14 +477,14 @@ TYPE specifies the archiver's symbol."
                        (elmo-archive-folder-archive-prefix-internal
                         new-folder)))
       (error "Not same archive type and prefix"))
-    (if (not (file-exists-p old-arc))
-       (error "No such file: %s" old-arc)
-      (if (file-exists-p new-arc)
-         (error "Already exists: %s" new-arc)
-       (if (not (file-directory-p new-dir))
-           (elmo-make-directory new-dir))
-       (rename-file old-arc new-arc)
-       t))))
+    (unless (file-exists-p old-arc)
+      (error "No such file: %s" old-arc))
+    (when (file-exists-p new-arc)
+      (error "Already exists: %s" new-arc))
+    (unless (file-directory-p new-dir)
+      (elmo-make-directory new-dir))
+    (rename-file old-arc new-arc)
+    t))
 
 (defun elmo-archive-folder-list-subfolders (folder one-level)
   (if elmo-archive-treat-file
@@ -570,11 +578,11 @@ TYPE specifies the archiver's symbol."
   (elmo-archive-message-fetch-internal folder number))
 
 (luna-define-method elmo-folder-append-buffer ((folder elmo-archive-folder)
-                                              unread &optional number)
-  (elmo-archive-folder-append-buffer folder unread number))
+                                              &optional flag number)
+  (elmo-archive-folder-append-buffer folder flag number))
 
 ;; verrrrrry slow!!
-(defun elmo-archive-folder-append-buffer (folder unread number)
+(defun elmo-archive-folder-append-buffer (folder flag number)
   (let* ((type (elmo-archive-folder-archive-type-internal folder))
         (prefix (elmo-archive-folder-archive-prefix-internal folder))
         (arc (elmo-archive-get-archive-name folder))
@@ -906,7 +914,7 @@ TYPE specifies the archiver's symbol."
       (elmo-archive-msgdb-create-entity-subr number))))
 
 (luna-define-method elmo-folder-msgdb-create ((folder elmo-archive-folder)
-                                             numbers seen-list)
+                                             numbers flag-table)
   (when numbers
     (save-excursion ;; 981005
       (if (and elmo-archive-use-izip-agent
@@ -914,11 +922,11 @@ TYPE specifies the archiver's symbol."
                (elmo-archive-folder-archive-type-internal folder)
                'cat-headers))
          (elmo-archive-msgdb-create-as-numlist-subr2
-          folder numbers seen-list)
+          folder numbers flag-table)
        (elmo-archive-msgdb-create-as-numlist-subr1
-        folder numbers seen-list)))))
+        folder numbers flag-table)))))
 
-(defun elmo-archive-msgdb-create-as-numlist-subr1 (folder numlist seen-list)
+(defun elmo-archive-msgdb-create-as-numlist-subr1 (folder numlist flag-table)
   (let* ((type (elmo-archive-folder-archive-type-internal folder))
         (file (elmo-archive-get-archive-name folder))
         (method (elmo-archive-get-method type 'cat))
@@ -944,17 +952,13 @@ TYPE specifies the archiver's symbol."
                 (elmo-msgdb-overview-entity-get-number entity)
                 (car entity)))
          (setq message-id (car entity))
-         (setq seen (member message-id seen-list))
          (if (setq gmark
                    (or (elmo-msgdb-global-mark-get message-id)
-                       (if (elmo-file-cache-status
-                            (elmo-file-cache-get message-id))
-                           (if seen
-                               nil
-                             elmo-msgdb-unread-cached-mark)
-                         (if seen
-                             elmo-msgdb-read-uncached-mark
-                           elmo-msgdb-new-mark))))
+                       (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
@@ -973,7 +977,7 @@ TYPE specifies the archiver's symbol."
 ;;; info-zip agent
 (defun elmo-archive-msgdb-create-as-numlist-subr2 (folder
                                                   numlist
-                                                  seen-list)
+                                                  flag-table)
   (let* ((delim1 elmo-mmdf-delimiter)          ;; MMDF
         (delim2 elmo-unixmail-delimiter)       ;; UNIX Mail
         (type (elmo-archive-folder-archive-type-internal folder))
@@ -1006,7 +1010,7 @@ TYPE specifies the archiver's symbol."
        (goto-char (point-min))
        (cond
         ((looking-at delim1)   ;; MMDF
-         (setq result (elmo-archive-parse-mmdf msgs seen-list))
+         (setq result (elmo-archive-parse-mmdf msgs flag-table))
          (setq overview (append overview (nth 0 result)))
          (setq number-alist (append number-alist (nth 1 result)))
          (setq mark-alist (append mark-alist (nth 2 result))))
@@ -1025,10 +1029,10 @@ TYPE specifies the archiver's symbol."
           percent))))
     (list overview number-alist mark-alist)))
 
-(defun elmo-archive-parse-mmdf (msgs seen-list)
+(defun elmo-archive-parse-mmdf (msgs flag-table)
   (let ((delim elmo-mmdf-delimiter)
        number sp ep rest entity overview number-alist mark-alist ret-val
-       message-id seen gmark)
+       message-id gmark)
     (goto-char (point-min))
     (setq rest msgs)
     (while (and rest (re-search-forward delim nil t)
@@ -1051,17 +1055,13 @@ TYPE specifies the archiver's symbol."
                 (elmo-msgdb-overview-entity-get-number entity)
                 (car entity)))
          (setq message-id (car entity))
-         (setq seen (member message-id seen-list))
          (if (setq gmark
                    (or (elmo-msgdb-global-mark-get message-id)
-                       (if (elmo-file-cache-status
-                            (elmo-file-cache-get message-id))
-                           (if seen
-                               nil
-                             elmo-msgdb-unread-cached-mark)
-                         (if seen
-                             elmo-msgdb-read-uncached-mark
-                           elmo-msgdb-new-mark))))
+                       (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