;;; elmo-dop.el -- Modules for Disconnected Operations on ELMO.
-;; Copyright 1998,1999,2000 Yuuichi Teranishi <teranisi@gohome.org>
+;; Copyright (C) 1998,1999,2000 Yuuichi Teranishi <teranisi@gohome.org>
;; Author: Yuuichi Teranishi <teranisi@gohome.org>
;; Keywords: mail, net news
Automatically loaded/saved.")
(defun elmo-dop-queue-append (folder function argument)
- (let ((operation (list (format "%s" folder) function argument)))
+ (let ((operation (list (elmo-string folder) function argument)))
(elmo-dop-queue-load)
(unless (member operation elmo-dop-queue) ;; don't append same operation
(setq elmo-dop-queue
(setq queue (cdr queue)))
(when (> count 0)
(if (elmo-y-or-n-p
- (format "%d pending operation(s) exists. Perform now?" count)
+ (format "%d pending operation(s) exists. Perform now? " count)
(not elmo-dop-flush-confirm) t)
(progn
(message "")
(when (and (string= func "create-folder-maybe")
(elmo-y-or-n-p
(format
- "Create folder %s failed. Abort creating?"
+ "Create folder %s failed. Abort creating? "
folder)
(not elmo-dop-flush-confirm) t))
(elmo-dop-save-pending-messages folder)
performed num)
(sit-for 1) ;
(elmo-dop-queue-save)))
- (if (elmo-y-or-n-p "Clear all pending operations?"
+ (if (elmo-y-or-n-p "Clear all pending operations? "
(not elmo-dop-flush-confirm) t)
(let ((queue elmo-dop-queue))
(while queue
(setq numbers (cdr numbers)))
(cons appended deleting-msgids)))
+(defun elmo-dop-list-deleted (folder number-alist)
+ "List message numbers to be deleted on FOLDER from NUMBER-ALIST."
+ (elmo-dop-queue-load)
+ (let ((queue elmo-dop-queue)
+ numbers matches nalist)
+ (while queue
+ (if (and (string= (nth 0 (car queue)) folder)
+ (string= (nth 1 (car queue)) "delete-msgids"))
+ (setq numbers
+ (nconc numbers
+ (delq nil (mapcar
+ (lambda (x)
+ (mapcar 'car
+ (elmo-string-rassoc-all
+ x number-alist)))
+ (nth 2 (car queue)))))))
+ (setq queue (cdr queue)))
+ (elmo-uniq-list (elmo-flatten numbers))))
+
(defun elmo-dop-delete-msgs (folder msgs msgdb)
(save-match-data
(let ((folder-numbers (elmo-make-folder-numbers-list folder msgs))
(save-match-data
(elmo-dop-queue-append folder "prefetch-msgs" msgs)))
-(defun elmo-dop-list-folder (folder)
+(defun elmo-dop-list-folder (folder &optional nohide)
(if (or (memq (elmo-folder-get-type folder)
'(imap4 nntp pop3 filter pipe))
(and (elmo-multi-p folder) (not (elmo-folder-local-p folder))))
(if elmo-enable-disconnected-operation
- (let* ((number-alist (elmo-msgdb-number-load
- (elmo-msgdb-expand-path folder)))
+ (let* ((path (elmo-msgdb-expand-path folder))
+ (number-alist (elmo-msgdb-number-load path))
(number-list (mapcar 'car number-alist))
(append-list (elmo-dop-append-list-load folder))
(append-num (length append-list))
+ (killed (and elmo-use-killed-list
+ (elmo-msgdb-killed-list-load path)))
alreadies
- (i 0)
- max-num)
+ max-num
+ (i 0))
+ (setq killed (nconc (elmo-dop-list-deleted folder number-alist)
+ killed))
(while append-list
(if (rassoc (car append-list) number-alist)
(setq alreadies (append alreadies
(append number-list
(list (+ max-num i 1))))
(setq i (+ 1 i)))
- number-list)
+ (elmo-living-messages number-list killed))
(error "Unplugged"))
;; not imap4 folder...list folder
(elmo-call-func folder "list-folder")))
matched)
(if (eq (elmo-folder-get-type folder) 'imap4)
(progn
- (while append-list
- (if (setq matched (car (rassoc (car append-list) number-alist)))
- (setq msgs (delete matched msgs)))
- (setq append-list (cdr append-list)))
+;;; (while append-list
+;;; (if (setq matched (car (rassoc (car append-list) number-alist)))
+;;; (setq msgs (delete matched msgs)))
+;;; (setq append-list (cdr append-list)))
(if msgs
(elmo-dop-queue-append folder func-name msgs)))
;; maildir... XXX hard coding.....
(if (eq (elmo-folder-get-type folder) 'imap4)
(if elmo-enable-disconnected-operation
(let* ((number-alist (elmo-msgdb-number-load
- (elmo-msgdb-expand-path folder)))
+ (elmo-msgdb-expand-path folder)))
(number-list (mapcar 'car number-alist))
(append-list (elmo-dop-append-list-load folder))
(append-num (length append-list))
(elmo-dop-unlock-message (car append-list)))
(setq append-list (cdr append-list))
(elmo-dop-append-list-save folder nil)))
- (message (format "Saving queued message in %s...done."
+ (message (format "Saving queued message in %s...done"
elmo-lost+found-folder)))
(defun elmo-dop-flush-pending-append-operations (folder &optional appends resume)
(setq appendings (cdr appendings)))
(elmo-dop-append-list-save folder resumed-list t)))
(while appendings
- (setq failure nil)
- (setq file-string (elmo-get-file-string ; message string
- (elmo-cache-get-path
- (car appendings))))
- (when file-string
- (condition-case ()
- (elmo-append-msg folder file-string (car appendings))
- (quit (setq failure t))
- (error (setq failure t)))
- (setq i (+ 1 i))
- (message (format "Appending queued messages...%d" i))
- (if failure
- (elmo-append-msg elmo-lost+found-folder
- file-string (car appendings))))
- (elmo-dop-unlock-message (car appendings))
- (setq appendings (cdr appendings)))
+ (let* ((seen-list (elmo-msgdb-seen-load
+ (elmo-msgdb-expand-path folder))))
+ (setq failure nil)
+ (setq file-string (elmo-get-file-string ; message string
+ (elmo-cache-get-path
+ (car appendings))))
+ (when file-string
+ (condition-case ()
+ (setq failure (not
+ (elmo-append-msg
+ folder file-string (car appendings) nil
+ (not (member (car appendings) seen-list)))))
+ (quit (setq failure t))
+ (error (setq failure t)))
+ (setq i (+ 1 i))
+ (message (format "Appending queued messages...%d" i))
+ (if failure
+ (elmo-append-msg elmo-lost+found-folder
+ file-string (car appendings) nil
+ (not (member (car appendings) seen-list)))))
+ (elmo-dop-unlock-message (car appendings))
+ (setq appendings (cdr appendings))))
;; All pending append operation is flushed.
(elmo-dop-append-list-save folder nil)
(elmo-commit folder)
(setq elmo-dop-queue (delete (list folder "append-operations" nil)
elmo-dop-queue))
(elmo-dop-queue-save))))
- (message "Appending queued messages...done."))
+ (message "Appending queued messages...done"))
(defun elmo-dop-folder-exists-p (folder)
- (if (and elmo-enable-disconnected-operation
- (eq (elmo-folder-get-type folder) 'imap4))
- (file-exists-p (elmo-msgdb-expand-path folder))
- (elmo-call-func folder "folder-exists-p")))
+ (or (file-exists-p (elmo-msgdb-expand-path folder))
+ (if (and elmo-enable-disconnected-operation
+ (eq (elmo-folder-get-type folder) 'imap4))
+ (file-exists-p (elmo-msgdb-expand-path folder))
+ (elmo-call-func folder "folder-exists-p"))))
(defun elmo-dop-create-folder (folder)
(if (eq (elmo-folder-get-type folder) 'imap4)
(setq mark-alist
(elmo-msgdb-mark-append
mark-alist (car numlist) gmark)))))
- (setq i (1+ i))
- (setq percent (/ (* i 100) num))
- (elmo-display-progress
- 'elmo-dop-msgdb-create-as-numlist "Creating msgdb..."
- percent)
+ (when (> num elmo-display-progress-threshold)
+ (setq i (1+ i))
+ (setq percent (/ (* i 100) num))
+ (elmo-display-progress
+ 'elmo-dop-msgdb-create-as-numlist "Creating msgdb..."
+ percent))
(setq numlist (cdr numlist)))
(list overview number-alist mark-alist))
(error "Unplugged"))
(elmo-call-func folder "msgdb-create" numlist new-mark already-mark
seen-mark important-mark seen-list)))
-(provide 'elmo-dop)
+(require 'product)
+(product-provide (provide 'elmo-dop) (require 'elmo-version))
;;; elmo-dop.el ends here