X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=elmo%2Felmo-multi.el;h=5be1400ad6412c98b735b23d688ea977c6f10526;hb=64eb91d7fe775e78e0f1e6555b595e40f391260a;hp=4a93b4d733394f5e2efa1e47e7415f9eecde0bc3;hpb=9ef19f77adfa042aefebdf54f58ba272e4fee489;p=elisp%2Fwanderlust.git diff --git a/elmo/elmo-multi.el b/elmo/elmo-multi.el index 4a93b4d..5be1400 100644 --- a/elmo/elmo-multi.el +++ b/elmo/elmo-multi.el @@ -1,4 +1,4 @@ -;;; elmo-multi.el -- Multiple Folder Interface for ELMO. +;;; elmo-multi.el --- Multiple Folder Interface for ELMO. ;; Copyright (C) 1998,1999,2000 Yuuichi Teranishi @@ -24,10 +24,10 @@ ;; ;;; Commentary: -;; +;; ;;; Code: -;; +;; (require 'elmo) (require 'luna) @@ -65,22 +65,36 @@ (luna-define-method elmo-folder-check ((folder elmo-multi-folder)) (dolist (fld (elmo-multi-folder-children-internal folder)) - (elmo-folder-check fld))) + (elmo-folder-synchronize fld))) (luna-define-method elmo-folder-close-internal ((folder elmo-multi-folder)) (dolist (fld (elmo-multi-folder-children-internal folder)) (elmo-folder-close-internal fld))) +(luna-define-method elmo-folder-close :after ((folder elmo-multi-folder)) + (dolist (fld (elmo-multi-folder-children-internal folder)) + (elmo-folder-set-msgdb-internal fld nil))) + (luna-define-method elmo-folder-expand-msgdb-path ((folder elmo-multi-folder)) - (expand-file-name (elmo-replace-string-as-filename + (expand-file-name (elmo-replace-string-as-filename (elmo-folder-name-internal folder)) (expand-file-name "multi" - elmo-msgdb-dir))) + 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))))))) (luna-define-method elmo-folder-get-primitive-list ((folder elmo-multi-folder)) (elmo-flatten - (mapcar + (mapcar 'elmo-folder-get-primitive-list (elmo-multi-folder-children-internal folder)))) @@ -94,13 +108,6 @@ (setq children (cdr children))) match)) -(luna-define-method elmo-message-use-cache-p ((folder elmo-multi-folder) - number) - (elmo-message-use-cache-p - (nth (- (/ number (elmo-multi-folder-divide-number-internal folder)) 1) - (elmo-multi-folder-children-internal folder)) - (% number (elmo-multi-folder-divide-number-internal folder)))) - (luna-define-method elmo-message-folder ((folder elmo-multi-folder) number) (nth (- (/ number (elmo-multi-folder-divide-number-internal folder)) 1) @@ -149,9 +156,7 @@ numbers-list)) (luna-define-method elmo-folder-msgdb-create ((folder elmo-multi-folder) - numbers new-mark already-mark - seen-mark important-mark - seen-list) + numbers seen-list) (let* ((folders (elmo-multi-folder-children-internal folder)) overview number-alist mark-alist entity numbers-list @@ -168,8 +173,6 @@ (elmo-multi-msgdb (elmo-folder-msgdb-create (nth cur-number folders) (nth cur-number numbers-list) - new-mark already-mark - seen-mark important-mark seen-list) (* (elmo-multi-folder-divide-number-internal folder) (1+ cur-number)))))) @@ -205,7 +208,7 @@ (if (setq same (rassoc (cdr (car cur)) all-alist)) (unless (= (/ (car (car cur)) (elmo-multi-folder-divide-number-internal folder)) - (/ (car same) + (/ (car same) (elmo-multi-folder-divide-number-internal folder))) ;; base is also same...delete it! (setq to-be-deleted @@ -234,7 +237,7 @@ (elmo-folder-set-msgdb-internal folder (elmo-msgdb-append (elmo-folder-msgdb folder) - append-msgdb t)) + append-msgdb)) (length to-be-deleted)) 0)) @@ -299,7 +302,7 @@ (unsync 0) (messages 0) num-list - diffs) + diffs nums) ;; If first time, dummy numbers is used as current number list. (unless numbers (let ((i 0) @@ -315,9 +318,11 @@ (elmo-number-set-to-number-list killed) numbers)))) (while flds - (setq diffs (nconc diffs (list (elmo-folder-diff - (car flds) - (car num-list))))) + (setq nums (elmo-folder-diff (car flds) (car num-list)) + nums (cons (or (elmo-diff-unread nums) + (elmo-diff-new nums)) + (elmo-diff-all nums))) + (setq diffs (nconc diffs (list nums))) (setq count (+ 1 count)) (setq num-list (cdr num-list)) (setq flds (cdr flds))) @@ -380,70 +385,53 @@ (setq result (nconc result (list one-alist)))) result)) -(luna-define-method elmo-folder-list-unreads-internal - ((folder elmo-multi-folder) unread-marks &optional mark-alist) - (elmo-multi-folder-list-unreads-internal folder unread-marks)) - -(defun elmo-multi-folder-list-unreads-internal (folder unread-marks) - (let ((folders (elmo-multi-folder-children-internal folder)) - (mark-alists (elmo-multi-split-mark-alist - folder - (elmo-msgdb-get-mark-alist - (elmo-folder-msgdb folder)))) - (cur-number 0) - unreads - all-unreads) - (while folders +(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)) - (unless (listp (setq unreads - (elmo-folder-list-unreads-internal - (car folders) unread-marks (car mark-alists)))) - (setq unreads (delq nil - (mapcar - (lambda (x) - (if (member (cadr x) unread-marks) - (car x))) - (car mark-alists))))) - (setq all-unreads - (nconc all-unreads - (mapcar - (lambda (x) - (+ x - (* cur-number - (elmo-multi-folder-divide-number-internal - folder)))) - unreads))) - (setq mark-alists (cdr mark-alists) - folders (cdr folders))) - all-unreads)) - -(luna-define-method elmo-folder-list-importants-internal - ((folder elmo-multi-folder) important-mark) - (let ((folders (elmo-multi-folder-children-internal folder)) - (mark-alists (elmo-multi-split-mark-alist - folder - (elmo-msgdb-get-mark-alist - (elmo-folder-msgdb folder)))) - (cur-number 0) - importants - all-importants) - (while folders + (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)) - (when (listp (setq importants - (elmo-folder-list-importants-internal - (car folders) important-mark))) - (setq all-importants - (nconc all-importants - (mapcar - (lambda (x) - (+ x - (* cur-number - (elmo-multi-folder-divide-number-internal - folder)))) - importants)))) - (setq mark-alists (cdr mark-alists) - folders (cdr folders))) - all-importants)) + (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-internal ((folder elmo-multi-folder) &optional nohide) @@ -554,7 +542,7 @@ (luna-define-method elmo-message-file-name ((folder elmo-multi-folder) number) (let ((pair (elmo-multi-real-folder-number folder number))) (elmo-message-file-name (car pair) (cdr pair)))) - + (luna-define-method elmo-folder-plugged-p ((folder elmo-multi-folder)) (let ((flds (elmo-multi-folder-children-internal folder))) (catch 'plugged @@ -596,33 +584,51 @@ (setq msg-list (cdr msg-list))) ret-val)) -(luna-define-method elmo-folder-mark-as-important ((folder elmo-multi-folder) - numbers) +(luna-define-method elmo-folder-mark-as-important :before ((folder + elmo-multi-folder) + numbers) (dolist (folder-numbers (elmo-multi-make-folder-numbers-list folder numbers)) (elmo-folder-mark-as-important (car folder-numbers) - (cdr folder-numbers))) - t) - -(luna-define-method elmo-folder-unmark-important ((folder elmo-multi-folder) - numbers) + (cdr folder-numbers)))) + +(luna-define-method elmo-folder-unmark-important :before ((folder + elmo-multi-folder) + numbers) (dolist (folder-numbers (elmo-multi-make-folder-numbers-list folder numbers)) (elmo-folder-unmark-important (car folder-numbers) - (cdr folder-numbers))) - t) + (cdr folder-numbers)))) -(luna-define-method elmo-folder-mark-as-read ((folder elmo-multi-folder) - numbers) +(luna-define-method elmo-folder-mark-as-read :before ((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))) - t) + (cdr folder-numbers) + ignore-flag))) -(luna-define-method elmo-folder-unmark-read ((folder elmo-multi-folder) - numbers) +(luna-define-method elmo-folder-unmark-read :before ((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))) - t) + (cdr folder-numbers) + ignore-flag))) + +(luna-define-method elmo-folder-mark-as-answered :before ((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 :before ((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)))) (require 'product) (product-provide (provide 'elmo-multi) (require 'elmo-version))