;;; Code:
;;
-(require 'elmo)
(require 'elmo-vars)
(require 'elmo-msgdb)
(require 'elmo-util)
+(eval-when-compile
+ (require 'elmo-imap4)
+ (require 'elmo-localdir))
;; global variable.
(defvar elmo-dop-queue nil
"A list of (folder-name function-to-be-called argument-list).
Automatically loaded/saved.")
-(defvar elmo-dop-folder (concat "+" (expand-file-name "dop"
- elmo-msgdb-dir))
- "A folder for `elmo-folder-append-messages' disconnected operations.")
-
-(defun elmo-dop-queue-append (folder function arguments)
- (let ((operation (list (elmo-folder-name-internal folder)
- function arguments)))
+(defun elmo-dop-queue-append (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
(append elmo-dop-queue
"Flush Disconnected operations.
If optional argument FORCE is non-nil, try flushing all operation queues
even an operation concerns the unplugged folder."
+ (elmo-dop-queue-load) ; load cache.
(elmo-dop-queue-merge)
(let ((queue elmo-dop-queue)
(count 0)
len)
(while queue
- (if (or force (elmo-folder-plugged-p (elmo-make-folder (caar queue))))
+ (if (or force (elmo-folder-plugged-p (caar queue)))
(setq count (1+ count)))
(setq queue (cdr queue)))
(when (> count 0)
(member (cadr que) elmo-dop-merge-funcs)
(setq match-queue
(car (delete nil
- (mapcar
- (lambda (new-queue)
- (if (and
- (string= (car que) (car new-queue))
- (string= (cadr que) (cadr new-queue)))
- new-queue))
- new-queue)))))
+ (mapcar '(lambda (new-queue)
+ (if (and
+ (string= (car que) (car new-queue))
+ (string= (cadr que) (cadr new-queue)))
+ new-queue))
+ new-queue)))))
(setcar (cddr match-queue)
(append (nth 2 match-queue) (nth 2 que)))
(setq new-queue (append new-queue (list que))))
elmo-msgdb-dir)
elmo-dop-queue)))
+(defun elmo-dop-lock-message (message-id &optional lock-list)
+ (let ((locked (or lock-list
+ (elmo-object-load
+ (expand-file-name
+ elmo-msgdb-lock-list-filename
+ elmo-msgdb-dir)))))
+ (setq locked (cons message-id locked))
+ (elmo-object-save
+ (expand-file-name elmo-msgdb-lock-list-filename
+ elmo-msgdb-dir)
+ locked)))
+
+(defun elmo-dop-unlock-message (message-id &optional lock-list)
+ (let ((locked (or lock-list
+ (elmo-object-load
+ (expand-file-name elmo-msgdb-lock-list-filename
+ elmo-msgdb-dir)))))
+ (setq locked (delete message-id locked))
+ (elmo-object-save
+ (expand-file-name elmo-msgdb-lock-list-filename
+ elmo-msgdb-dir)
+ locked)))
+
+(defun elmo-dop-lock-list-load ()
+ (elmo-object-load
+ (expand-file-name elmo-msgdb-lock-list-filename
+ elmo-msgdb-dir)))
+
+(defun elmo-dop-lock-list-save (lock-list)
+ (elmo-object-save
+ (expand-file-name elmo-msgdb-lock-list-filename
+ elmo-msgdb-dir)
+ lock-list))
+
(defun elmo-dop-append-list-load (folder &optional resume)
(elmo-object-load
(expand-file-name (if resume
elmo-msgdb-resume-list-filename
elmo-msgdb-append-list-filename)
- (elmo-folder-msgdb-path folder))))
+ (elmo-msgdb-expand-path folder))))
(defun elmo-dop-append-list-save (folder append-list &optional resume)
(if append-list
(expand-file-name (if resume
elmo-msgdb-resume-list-filename
elmo-msgdb-append-list-filename)
- (elmo-folder-msgdb-path folder))
+ (elmo-msgdb-expand-path folder))
append-list)
(condition-case ()
(delete-file (expand-file-name (if resume
elmo-msgdb-resume-list-filename
elmo-msgdb-append-list-filename)
- (elmo-folder-msgdb-path folder)))
+ (elmo-msgdb-expand-path folder)))
(error))))
(defun elmo-dop-deleting-numbers-to-msgids (alist numbers appended)
(setq numbers (cdr numbers)))
(cons appended deleting-msgids)))
-(defun elmo-dop-list-deleted (name number-alist)
- "List message numbers to be deleted on folder with NAME from NUMBER-ALIST."
+(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)) name)
+ (if (and (string= (nth 0 (car queue)) folder)
(string= (nth 1 (car queue)) "delete-msgids"))
(setq numbers
(nconc numbers
(elmo-folder-get-spec folder)
msgs msgdb))))
-(defun elmo-dop-folder-status (folder)
- (let* ((number-alist (elmo-msgdb-number-load
- (elmo-folder-msgdb-path folder)))
- (number-list (mapcar 'car number-alist))
- (append-list (elmo-dop-append-list-load folder))
- (append-num (length append-list))
- alreadies
- (i 0)
- max-num)
- (while append-list
- (if (rassoc (car append-list) number-alist)
- (setq alreadies (append alreadies
- (list (car append-list)))))
- (setq append-list (cdr append-list)))
- (setq max-num
- (or (nth (max (- (length number-list) 1) 0) number-list)
- 0))
- (cons (- (+ max-num append-num) (length alreadies))
- (- (+ (length number-list) append-num) (length alreadies)))))
-
(defun elmo-dop-max-of-folder (folder)
(if (eq (elmo-folder-get-type folder) 'imap4)
(if elmo-enable-disconnected-operation
(car appendings))))
(when file-string
(condition-case ()
- (elmo-append-msg folder file-string (car appendings) nil
- (not (member (car appendings) seen-list)))
+ (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))
(error "Unplugged"))
(elmo-call-func folder "create-folder")))
+(defun elmo-dop-delete-folder (folder)
+ (error "Unplugged"))
+
+(defun elmo-dop-rename-folder (old-folder new-folder)
+ (error "Unplugged"))
+
(defun elmo-dop-append-msg (folder string message-id &optional msg)
(if elmo-enable-disconnected-operation
(if message-id