-(luna-define-method elmo-folder-msgdb-create ((folder elmo-multi-folder)
- numbers new-mark already-mark
- seen-mark important-mark
- seen-list)
- (let* ((folders (elmo-multi-folder-children-internal folder))
- overview number-alist mark-alist entity
- numbers-list
- cur-number
- i percent num
- msgdb)
- (setq numbers-list (elmo-multi-split-numbers folder numbers))
- (setq cur-number 0)
- (while (< cur-number (length folders))
- (if (nth cur-number numbers-list)
- (setq msgdb
- (elmo-msgdb-append
- msgdb
- (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))))))
- (setq cur-number (1+ cur-number)))
- (elmo-msgdb-sort-by-date msgdb)))
-
-(luna-define-method elmo-folder-process-crosspost ((folder elmo-multi-folder)
- &optional
- number-alist)
- (let ((number-alists (elmo-multi-split-number-alist
- folder
- (elmo-msgdb-get-number-alist
- (elmo-folder-msgdb folder))))
- (cur-number 1))
- (dolist (child (elmo-multi-folder-children-internal folder))
- (elmo-folder-process-crosspost child (car number-alists))
- (setq cur-number (+ 1 cur-number)
- number-alists (cdr number-alists)))))
-
-(defsubst elmo-multi-folder-append-msgdb (folder append-msgdb)
- (if append-msgdb
- (let* ((number-alist (elmo-msgdb-get-number-alist append-msgdb))
- (all-alist (copy-sequence (append
- (elmo-msgdb-get-number-alist
- (elmo-folder-msgdb folder))
- number-alist)))
- (cur number-alist)
- overview to-be-deleted
- mark-alist same)
- (while cur
- (setq all-alist (delq (car cur) all-alist))
- ;; same message id exists.
- (if (setq same (rassoc (cdr (car cur)) all-alist))
- (unless (= (/ (car (car cur))
- (elmo-multi-folder-divide-number-internal folder))
- (/ (car same)
- (elmo-multi-folder-divide-number-internal folder)))
- ;; base is also same...delete it!
- (setq to-be-deleted
- (append to-be-deleted (list (car (car cur)))))))
- (setq cur (cdr cur)))
- (cond ((eq (elmo-folder-process-duplicates-internal folder)
- 'hide)
- ;; Hide duplicates.
- (elmo-msgdb-append-to-killed-list folder to-be-deleted)
- (setq overview (elmo-delete-if
- (lambda (x)
- (memq (elmo-msgdb-overview-entity-get-number
- x)
- to-be-deleted))
- (elmo-msgdb-get-overview append-msgdb)))
- ;; Should be mark as read.
- (elmo-folder-mark-as-read folder to-be-deleted)
- (elmo-msgdb-set-overview append-msgdb overview))
- ((eq (elmo-folder-process-duplicates-internal folder)
- 'read)
- ;; Mark as read duplicates.
- (elmo-folder-mark-as-read folder to-be-deleted))
- (t
- ;; Do nothing.
- (setq to-be-deleted nil)))
- (elmo-folder-set-msgdb-internal folder
- (elmo-msgdb-append
- (elmo-folder-msgdb folder)
- append-msgdb))
- (length to-be-deleted))
- 0))
-
-(luna-define-method elmo-folder-append-msgdb ((folder elmo-multi-folder)
- append-msgdb)
- (elmo-multi-folder-append-msgdb folder append-msgdb))
-
-(defmacro elmo-multi-real-folder-number (folder number)
- "Returns a cons cell of real FOLDER and NUMBER."
- (` (cons (nth (-
- (/ (, number)
- (elmo-multi-folder-divide-number-internal (, folder)))
- 1) (elmo-multi-folder-children-internal (, folder)))
- (% (, number) (elmo-multi-folder-divide-number-internal
- (, folder))))))
-
-(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))