+(defsubst elmo-filter-folder-list-unreads-internal (folder unread-marks
+ mark-alist)
+ (let ((unreads (elmo-folder-list-unreads-internal
+ (elmo-filter-folder-target-internal folder)
+ unread-marks mark-alist)))
+ (unless (listp unreads)
+ (setq unreads
+ (delq nil
+ (mapcar
+ (function
+ (lambda (x)
+ (if (member (cadr x) unread-marks)
+ (car x))))
+ (elmo-msgdb-get-mark-alist (elmo-folder-msgdb folder))))))
+ (elmo-list-filter
+ (mapcar 'car (elmo-msgdb-get-number-alist
+ (elmo-folder-msgdb folder)))
+ unreads)))
+
+(luna-define-method elmo-folder-list-unreads-internal
+ ((folder elmo-filter-folder)
+ unread-marks &optional mark-alist)
+ (elmo-filter-folder-list-unreads-internal folder unread-marks mark-alist))
+
+(defsubst elmo-filter-folder-list-importants-internal (folder important-mark)
+ (let ((importants (elmo-folder-list-importants-internal
+ (elmo-filter-folder-target-internal folder)
+ important-mark)))
+ (if (listp importants)
+ (elmo-list-filter
+ (mapcar 'car (elmo-msgdb-get-number-alist
+ (elmo-folder-msgdb folder)))
+ importants)
+ t)))
+
+(luna-define-method elmo-folder-list-importants-internal
+ ((folder elmo-filter-folder)
+ important-mark)
+ (elmo-filter-folder-list-importants-internal folder important-mark))
+
+(luna-define-method elmo-folder-list-subfolders ((folder elmo-filter-folder)
+ &optional one-level)
+ (let* ((target (elmo-filter-folder-target-internal folder))
+ (prefix (and (string-match
+ (concat "^\\(.*\\)"
+ (regexp-quote
+ (elmo-folder-name-internal
+ target))
+ "$")
+ (elmo-folder-name-internal folder))
+ (match-string 1 (elmo-folder-name-internal
+ folder)))))
+ (elmo-mapcar-list-of-list
+ (lambda (x) (concat prefix x))
+ (elmo-folder-list-subfolders target one-level))))
+
+(luna-define-method elmo-folder-diff :around ((folder elmo-filter-folder)
+ &optional numbers)
+ (if (not (and (vectorp (elmo-filter-folder-condition-internal
+ folder))
+ (string-match "^last$"
+ (elmo-filter-key
+ (elmo-filter-folder-condition-internal
+ folder)))))
+ (cons nil (cdr (elmo-folder-diff (elmo-filter-folder-target-internal
+ folder))))
+ (luna-call-next-method)))
+
+(luna-define-method elmo-folder-status ((folder elmo-filter-folder))
+ (elmo-folder-status
+ (elmo-filter-folder-target-internal folder)))
+
+(luna-define-method elmo-folder-exists-p ((folder elmo-filter-folder))
+ (elmo-folder-exists-p (elmo-filter-folder-target-internal folder)))
+
+(luna-define-method elmo-folder-creatable-p ((folder elmo-filter-folder))
+ (elmo-folder-creatable-p (elmo-filter-folder-target-internal folder)))
+
+(luna-define-method elmo-folder-writable-p ((folder elmo-filter-folder))
+ (elmo-folder-writable-p (elmo-filter-folder-target-internal folder)))
+
+(luna-define-method elmo-folder-create ((folder elmo-filter-folder))
+ (elmo-folder-create (elmo-filter-folder-target-internal folder)))
+
+(luna-define-method elmo-folder-search ((folder elmo-filter-folder)
+ condition &optional numbers)