X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=elmo%2Felmo-multi.el;h=7ef950f024bbb5fba0ad0cc0c5d4ca8d32ed02af;hb=b84399973757bd323516632e36403b67cf2f8969;hp=8d82fd031b53f3a188485c1835ae623eef79fe3e;hpb=edc77daf0f76ff7123c9c5ec205cdf77682b8bb5;p=elisp%2Fwanderlust.git diff --git a/elmo/elmo-multi.el b/elmo/elmo-multi.el index 8d82fd0..7ef950f 100644 --- a/elmo/elmo-multi.el +++ b/elmo/elmo-multi.el @@ -43,7 +43,7 @@ (defmacro elmo-multi-real-folder-number (folder number) "Returns a cons cell of real FOLDER and NUMBER." - (` (cons (nth (- + (` (cons (nth (- (/ (, number) (elmo-multi-folder-divide-number-internal (, folder))) 1) (elmo-multi-folder-children-internal (, folder))) @@ -85,10 +85,12 @@ (elmo-folder-set-msgdb-internal fld nil))) (luna-define-method elmo-folder-synchronize ((folder elmo-multi-folder) - &optional ignore-msgdb + &optional + disable-killed + ignore-msgdb no-check) (dolist (fld (elmo-multi-folder-children-internal folder)) - (elmo-folder-synchronize fld ignore-msgdb no-check)) + (elmo-folder-synchronize fld disable-killed ignore-msgdb no-check)) 0) (luna-define-method elmo-folder-expand-msgdb-path ((folder @@ -99,14 +101,10 @@ elmo-msgdb-directory))) (luna-define-method elmo-folder-newsgroups ((folder elmo-multi-folder)) - (delq nil - (elmo-flatten - (mapcar - 'elmo-folder-newsgroups - (elmo-flatten - (mapcar - 'elmo-folder-get-primitive-list - (elmo-multi-folder-children-internal folder))))))) + (apply #'nconc + (mapcar + 'elmo-folder-newsgroups + (elmo-multi-folder-children-internal folder)))) (luna-define-method elmo-folder-get-primitive-list ((folder elmo-multi-folder)) (elmo-flatten @@ -129,6 +127,10 @@ (nth (- (/ number (elmo-multi-folder-divide-number-internal folder)) 1) (elmo-multi-folder-children-internal folder))) +(luna-define-method elmo-message-cached-p ((folder elmo-multi-folder) number) + (let ((pair (elmo-multi-real-folder-number folder number))) + (elmo-message-cached-p (car pair) (cdr pair)))) + (luna-define-method elmo-message-set-cached ((folder elmo-multi-folder) number cached) (let ((pair (elmo-multi-real-folder-number folder number))) @@ -168,14 +170,20 @@ (setq children (cdr children))) match)))) +(luna-define-method elmo-message-entity-parent ((folder + elmo-multi-folder) entity) + (elmo-message-entity + folder + (elmo-message-entity-field entity 'references))) + (luna-define-method elmo-message-field ((folder elmo-multi-folder) number field) (let ((pair (elmo-multi-real-folder-number folder number))) (elmo-message-field (car pair) (cdr pair) field))) -(luna-define-method elmo-message-mark ((folder elmo-multi-folder) number) +(luna-define-method elmo-message-flags ((folder elmo-multi-folder) number) (let ((pair (elmo-multi-real-folder-number folder number))) - (elmo-message-mark (car pair) (cdr pair)))) + (elmo-message-flags (car pair) (cdr pair)))) (defun elmo-multi-split-numbers (folder numlist &optional as-is) (let ((numbers (sort numlist '<)) @@ -260,54 +268,6 @@ (cons news alls) (list news unreads alls)))) -(luna-define-method elmo-folder-list-unreads ((folder elmo-multi-folder)) - (let ((cur-number 0) - unreads) - (dolist (child (elmo-multi-folder-children-internal folder)) - (setq cur-number (+ cur-number 1)) - (setq unreads - (nconc - unreads - (mapcar (lambda (x) - (+ x (* cur-number - (elmo-multi-folder-divide-number-internal - folder)))) - (elmo-folder-list-unreads child))))) - unreads)) - -(luna-define-method elmo-folder-list-answereds ((folder elmo-multi-folder)) - (let ((cur-number 0) - answereds) - (dolist (child (elmo-multi-folder-children-internal folder)) - (setq cur-number (+ cur-number 1)) - (setq answereds - (nconc - answereds - (mapcar (lambda (x) - (+ x (* cur-number - (elmo-multi-folder-divide-number-internal - folder)))) - (elmo-folder-list-answereds child))))) - answereds)) - -(luna-define-method elmo-folder-list-importants ((folder elmo-multi-folder)) - (let ((cur-number 0) - importants) - (dolist (child (elmo-multi-folder-children-internal folder)) - (setq cur-number (+ cur-number 1)) - (setq importants - (nconc - importants - (mapcar (lambda (x) - (+ x (* cur-number - (elmo-multi-folder-divide-number-internal - folder)))) - (elmo-folder-list-importants child))))) - (elmo-uniq-list - (nconc importants - (elmo-folder-list-messages-with-global-mark - folder elmo-msgdb-important-mark))))) - (luna-define-method elmo-folder-list-messages ((folder elmo-multi-folder) &optional visible-only in-msgdb) (let* ((flds (elmo-multi-folder-children-internal folder)) @@ -361,37 +321,28 @@ t))) (luna-define-method elmo-folder-search ((folder elmo-multi-folder) - condition &optional numlist) + condition &optional numbers) (let* ((flds (elmo-multi-folder-children-internal folder)) (cur-number 0) - numlist-list cur-numlist ; for filtered search. - ret-val) - (if numlist - (setq numlist-list - (elmo-multi-split-numbers folder numlist t))) + numlist + matches) + (setq numbers (or numbers + (elmo-folder-list-messages folder))) (while flds (setq cur-number (+ cur-number 1)) - (when numlist - (setq cur-numlist (car numlist-list)) - (if (null cur-numlist) - ;; t means filter all. - (setq cur-numlist t))) - (setq ret-val (append - ret-val - (elmo-list-filter - cur-numlist - (mapcar - (function - (lambda (x) - (+ - (* (elmo-multi-folder-divide-number-internal - folder) cur-number) x))) - (elmo-folder-search - (car flds) condition))))) - (when numlist - (setq numlist-list (cdr numlist-list))) + (setq matches (append matches + (mapcar + (function + (lambda (x) + (+ + (* (elmo-multi-folder-divide-number-internal + folder) + cur-number) + x))) + (elmo-folder-search + (car flds) condition)))) (setq flds (cdr flds))) - ret-val)) + (elmo-list-filter numbers matches))) (luna-define-method elmo-message-use-cache-p ((folder elmo-multi-folder) number) @@ -447,57 +398,19 @@ (setq msg-list (cdr msg-list))) ret-val)) -(luna-define-method elmo-folder-mark-as-important ((folder - elmo-multi-folder) - numbers - &optional - ignore-flags) - (dolist (folder-numbers (elmo-multi-make-folder-numbers-list folder numbers)) - (elmo-folder-mark-as-important (car folder-numbers) - (cdr folder-numbers) - ignore-flags))) - -(luna-define-method elmo-folder-unmark-important ((folder - elmo-multi-folder) - numbers - &optional - ignore-flags) - (dolist (folder-numbers (elmo-multi-make-folder-numbers-list folder numbers)) - (elmo-folder-unmark-important (car folder-numbers) - (cdr folder-numbers) - ignore-flags))) - -(luna-define-method elmo-folder-mark-as-read ((folder - elmo-multi-folder) - numbers - &optional ignore-flag) - (dolist (folder-numbers (elmo-multi-make-folder-numbers-list folder numbers)) - (elmo-folder-mark-as-read (car folder-numbers) - (cdr folder-numbers) - ignore-flag))) - -(luna-define-method elmo-folder-unmark-read ((folder - elmo-multi-folder) - numbers - &optional ignore-flag) - (dolist (folder-numbers (elmo-multi-make-folder-numbers-list folder numbers)) - (elmo-folder-unmark-read (car folder-numbers) - (cdr folder-numbers) - ignore-flag))) - -(luna-define-method elmo-folder-mark-as-answered ((folder - elmo-multi-folder) - numbers) - (dolist (folder-numbers (elmo-multi-make-folder-numbers-list folder numbers)) - (elmo-folder-mark-as-answered (car folder-numbers) - (cdr folder-numbers)))) - -(luna-define-method elmo-folder-unmark-answered ((folder - elmo-multi-folder) - numbers) - (dolist (folder-numbers (elmo-multi-make-folder-numbers-list folder numbers)) - (elmo-folder-unmark-answered (car folder-numbers) - (cdr folder-numbers)))) +(luna-define-method elmo-folder-set-flag ((folder elmo-multi-folder) + numbers + flag + &optional is-local) + (dolist (pair (elmo-multi-make-folder-numbers-list folder numbers)) + (elmo-folder-set-flag (car pair) (cdr pair) flag is-local))) + +(luna-define-method elmo-folder-unset-flag ((folder elmo-multi-folder) + numbers + flag + &optional is-local) + (dolist (pair (elmo-multi-make-folder-numbers-list folder numbers)) + (elmo-folder-unset-flag (car pair) (cdr pair) flag is-local))) (luna-define-method elmo-folder-list-flagged ((folder elmo-multi-folder) flag