* elmo-localdir.el (elmo-folder-append-buffer): Fix interface.
[elisp/wanderlust.git] / elmo / elmo-filter.el
index 1afaae2..d387f8e 100644 (file)
       (elmo-folder-set-msgdb-internal (elmo-filter-folder-target-internal
                                       folder) nil)))
 
-(luna-define-method elmo-folder-set-message-modified ((folder
-                                                      elmo-filter-folder)
-                                                     modified)
-  (if (elmo-filter-folder-require-msgdb-internal folder)
-      (elmo-folder-set-message-modified-internal
-       (elmo-filter-folder-target-internal folder) modified)))
-
 (luna-define-method elmo-folder-commit :around ((folder elmo-filter-folder))
   ;; Save target msgdb if it is used.
   (if (elmo-filter-folder-require-msgdb-internal folder)
    (elmo-replace-string-as-filename (elmo-folder-name-internal folder))
    (expand-file-name "filter" elmo-msgdb-directory)))
 
+(luna-define-method elmo-folder-search-requires-msgdb-p ((folder
+                                                         elmo-filter-folder)
+                                                        condition)
+  (elmo-folder-search-requires-msgdb-p
+   (elmo-filter-folder-target-internal folder) condition))
+
 (luna-define-method elmo-folder-newsgroups ((folder elmo-filter-folder))
   (elmo-folder-newsgroups (elmo-filter-folder-target-internal folder)))
 
 
 (luna-define-method elmo-folder-get-primitive-list ((folder
                                                     elmo-filter-folder))
-  (list (elmo-filter-folder-target-internal folder)))
+  (elmo-folder-get-primitive-list (elmo-filter-folder-target-internal folder)))
 
 (luna-define-method elmo-folder-contains-type ((folder elmo-filter-folder)
                                               type)
   (if (elmo-filter-folder-require-msgdb-internal folder)
       (let* ((target-folder (elmo-filter-folder-target-internal folder))
             (len (length numlist))
-            (msgdb (elmo-folder-msgdb target-folder))
-            overview number-alist mark-alist message-id entity mark)
+            (new-msgdb (elmo-make-msgdb))
+            message-id entity)
+       (elmo-folder-check target-folder)
        (when (> len elmo-display-progress-threshold)
          (elmo-progress-set 'elmo-folder-msgdb-create
                             len "Creating msgdb..."))
        (unwind-protect
            (dolist (number numlist)
-             (setq entity (elmo-msgdb-overview-get-entity number msgdb))
+             (setq entity (elmo-message-entity target-folder number))
              (when entity
-               (setq overview (elmo-msgdb-append-element overview entity)
-                     message-id (elmo-msgdb-overview-entity-get-id entity)
-                     number-alist (elmo-msgdb-number-add number-alist
-                                                         number
-                                                         message-id))
-               (when (setq mark (elmo-msgdb-get-mark msgdb number))
-                 (setq mark-alist (elmo-msgdb-mark-append
-                                   mark-alist
-                                   number
-                                   mark))))
+               (elmo-msgdb-append-entity
+                new-msgdb entity
+                (elmo-message-flags target-folder number)))
              (elmo-progress-notify 'elmo-folder-msgdb-create))
          (elmo-progress-clear 'elmo-folder-msgdb-create))
-       (list overview number-alist mark-alist))
+       new-msgdb)
     ;; Does not require msgdb.
     (elmo-folder-msgdb-create
      (elmo-filter-folder-target-internal folder)
    (elmo-filter-folder-target-internal folder)
    flag number))
 
+(luna-define-method elmo-message-fetch-bodystructure ((folder
+                                                      elmo-filter-folder)
+                                                     number strategy)
+  (elmo-message-fetch-bodystructure
+   (elmo-filter-folder-target-internal folder)
+   number strategy))
+
 (luna-define-method elmo-message-fetch ((folder elmo-filter-folder)
                                        number strategy
                                        &optional section outbuf unseen)
       ;; not available
       t)))
 
-(defsubst elmo-filter-folder-list-unreads (folder)
-  (elmo-list-filter
-   (elmo-folder-list-messages folder nil 'in-msgdb)
-   (elmo-folder-list-unreads
-    (elmo-filter-folder-target-internal folder))))
-
-(luna-define-method elmo-folder-list-unreads :around ((folder
-                                                      elmo-filter-folder))
-  (if (elmo-filter-folder-require-msgdb-internal folder)
-      (elmo-filter-folder-list-unreads folder)
-    (luna-call-next-method)))
-
-(defsubst elmo-filter-folder-list-importants (folder)
-  (elmo-list-filter
-   (elmo-folder-list-messages folder nil 'in-msgdb)
-   (elmo-folder-list-importants
-    (elmo-filter-folder-target-internal folder))))
-
-(luna-define-method elmo-folder-list-importants :around ((folder
-                                                         elmo-filter-folder))
-  (if (elmo-filter-folder-require-msgdb-internal folder)
-      (elmo-filter-folder-list-importants folder)
-    (luna-call-next-method)))
-
 (luna-define-method elmo-folder-list-subfolders ((folder elmo-filter-folder)
                                                 &optional one-level)
   (let* ((target (elmo-filter-folder-target-internal folder))
                   (string= (elmo-filter-value condition) "unread")))
          (setq diff (elmo-folder-diff (elmo-filter-folder-target-internal
                                        folder)))
-         (if (consp diff)
-             (cons (car diff) (car diff))
-           (cons (car diff) (nth 1 diff))))
+         (if (consp (cdr diff))
+             ;; new unread unread
+             (list (car diff) (nth 1 diff) (nth 1 diff))
+           (cons (car diff) (car diff))))
         ((string= "last" (elmo-filter-key condition))
          (luna-call-next-method))
         (t
 (luna-define-method elmo-folder-search ((folder elmo-filter-folder)
                                        condition &optional numbers)
   ;; search from messages in this folder
-  (elmo-list-filter
-   numbers
-   (elmo-folder-search (elmo-filter-folder-target-internal folder)
-                      condition
-                      (elmo-folder-list-messages folder))))
+  (let ((result (elmo-folder-search
+                (elmo-filter-folder-target-internal folder)
+                condition
+                (elmo-folder-list-messages folder))))
+    (if numbers
+       (elmo-list-filter numbers result)
+      result)))
 
 (luna-define-method elmo-message-use-cache-p ((folder elmo-filter-folder)
                                              number)
   (elmo-message-file-name (elmo-filter-folder-target-internal folder)
                          number))
 
-(luna-define-method elmo-folder-mark-as-read :around ((folder
-                                                      elmo-filter-folder)
-                                                     numbers
-                                                     &optional ignore-flag)
-  (elmo-folder-mark-as-read (elmo-filter-folder-target-internal folder)
-                           numbers ignore-flag)
-  (luna-call-next-method))
-
-(luna-define-method elmo-folder-unmark-read :around ((folder
-                                                     elmo-filter-folder)
-                                                    numbers
-                                                    &optional ignore-flag)
-  (elmo-folder-unmark-read (elmo-filter-folder-target-internal folder)
-                          numbers ignore-flag)
-  (luna-call-next-method))
-
-(luna-define-method elmo-folder-mark-as-important :around ((folder
-                                                           elmo-filter-folder)
-                                                          numbers
-                                                          &optional
-                                                          ignore-flag)
-  (elmo-folder-mark-as-important (elmo-filter-folder-target-internal folder)
-                                numbers ignore-flag)
-    (luna-call-next-method))
-
-(luna-define-method elmo-folder-unmark-important :around ((folder
-                                                          elmo-filter-folder)
-                                                         numbers
-                                                         &optional
-                                                         ignore-flag)
-  (elmo-folder-unmark-important (elmo-filter-folder-target-internal folder)
-                               numbers ignore-flag)
-  (luna-call-next-method))
-
-(luna-define-method elmo-folder-mark-as-answered :around ((folder
-                                                          elmo-filter-folder)
-                                                         numbers)
-  (elmo-folder-mark-as-answered (elmo-filter-folder-target-internal folder)
-                               numbers)
-  (luna-call-next-method))
-
-
-(luna-define-method elmo-folder-unmark-answered :around ((folder
-                                                         elmo-filter-folder)
-                                                        numbers)
-  (elmo-folder-unmark-answered (elmo-filter-folder-target-internal folder)
-                              numbers)
-  (luna-call-next-method))
+(luna-define-method elmo-folder-set-flag :before ((folder elmo-filter-folder)
+                                                 numbers
+                                                 flag
+                                                 &optional is-local)
+  (elmo-folder-set-flag (elmo-filter-folder-target-internal folder)
+                       numbers flag is-local))
+
+(luna-define-method elmo-folder-unset-flag :before ((folder elmo-filter-folder)
+                                                   numbers
+                                                   flag
+                                                   &optional is-local)
+  (elmo-folder-unset-flag (elmo-filter-folder-target-internal folder)
+                         numbers flag is-local))
+
+(luna-define-method elmo-message-folder ((folder elmo-filter-folder)
+                                        number)
+  (elmo-message-folder (elmo-filter-folder-target-internal folder) number))
 
 (require 'product)
 (product-provide (provide 'elmo-filter) (require 'elmo-version))