(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)))
(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
(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)))
+ (elmo-message-set-cached (car pair) (cdr pair) cached)))
+
+(luna-define-method elmo-find-fetch-strategy
+ ((folder elmo-multi-folder) entity &optional ignore-cache)
+ (let ((pair (elmo-multi-real-folder-number
+ folder
+ (elmo-message-entity-number entity))))
+ (elmo-find-fetch-strategy
+ (car pair)
+ (elmo-message-entity (car pair) (cdr pair)) ignore-cache)))
+
(luna-define-method elmo-message-entity ((folder elmo-multi-folder) key)
(cond
((numberp key)
(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)))
(let ((pair (elmo-multi-real-folder-number folder number)))
(elmo-message-mark (car pair) (cdr pair))))
+(luna-define-method elmo-message-flags ((folder elmo-multi-folder) number)
+ (let ((pair (elmo-multi-real-folder-number folder number)))
+ (elmo-message-flags (car pair) (cdr pair))))
+
(defun elmo-multi-split-numbers (folder numlist &optional as-is)
(let ((numbers (sort numlist '<))
(divider (elmo-multi-folder-divide-number-internal folder))
(dolist (child (elmo-multi-folder-children-internal folder))
(elmo-folder-process-crosspost child)))
-(defsubst elmo-multi-find-fetch-strategy (folder entity ignore-cache)
- (if entity
- (let ((pair (elmo-multi-real-folder-number
- folder
- (elmo-msgdb-overview-entity-get-number entity)))
- (new-entity (elmo-msgdb-copy-overview-entity entity)))
- (setq new-entity
- (elmo-msgdb-overview-entity-set-number new-entity (cdr pair)))
- (elmo-find-fetch-strategy (car pair) new-entity ignore-cache))
- (elmo-make-fetch-strategy 'entire)))
-
-(luna-define-method elmo-find-fetch-strategy
- ((folder elmo-multi-folder)
- entity &optional ignore-cache)
- (elmo-multi-find-fetch-strategy folder entity ignore-cache))
-
(luna-define-method elmo-message-fetch ((folder elmo-multi-folder)
number strategy
&optional section outbuf unseen)
(setq cur-number (+ 1 cur-number)))
t))
-(luna-define-method elmo-folder-diff ((folder elmo-multi-folder)
- &optional numbers)
- (elmo-multi-folder-diff folder numbers))
+(luna-define-method elmo-folder-diff ((folder elmo-multi-folder))
+ (elmo-multi-folder-diff folder))
-(defun elmo-multi-folder-diff (folder numbers)
+(defun elmo-multi-folder-diff (folder)
(let ((flds (elmo-multi-folder-children-internal folder))
- (num-list (and numbers (elmo-multi-split-numbers folder numbers)))
- (unsync 0)
- (messages 0)
- diffs)
+ (news 0)
+ (unreads 0)
+ (alls 0)
+ no-unreads diff)
(while flds
- (setq diffs (nconc diffs (list (elmo-folder-diff (car flds)
- (car num-list)))))
+ (setq diff (elmo-folder-diff (car flds)))
+ (cond
+ ((consp (cdr diff)) ; (new unread all)
+ (setq news (+ news (nth 0 diff))
+ unreads (+ unreads (nth 1 diff))
+ alls (+ alls (nth 2 diff))))
+ (t
+ (setq no-unreads t)
+ (setq news (+ news (car diff))
+ alls (+ alls (cdr diff)))))
(setq flds (cdr flds)))
- (while diffs
- (and (car (car diffs))
- (setq unsync (+ unsync (car (car diffs)))))
- (setq messages (+ messages (cdr (car diffs))))
- (setq diffs (cdr diffs)))
- (elmo-folder-set-info-hashtb folder nil messages)
- (cons unsync messages)))
+ (if no-unreads
+ (cons news alls)
+ (list news unreads alls))))
(luna-define-method elmo-folder-list-unreads ((folder elmo-multi-folder))
(let ((cur-number 0)
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)
(elmo-folder-list-flagged child flag in-msgdb)))))
numbers))
+(luna-define-method elmo-folder-set-message-modified ((folder
+ elmo-multi-folder)
+ modified)
+ (dolist (child (elmo-multi-folder-children-internal folder))
+ (elmo-folder-set-message-modified child modified)))
+
(luna-define-method elmo-folder-commit ((folder elmo-multi-folder))
(dolist (child (elmo-multi-folder-children-internal folder))
(elmo-folder-commit child)))