- (elmo-dop-queue-append folder 'elmo-folder-delete-messages-dop-delayed
- (list
- (mapcar
- (lambda (number)
- (cons number (elmo-message-field
- folder number 'message-id)))
- numbers)))
- t)
-
-(defsubst elmo-message-encache-dop (folder number)
- (elmo-dop-queue-append folder 'elmo-message-encache (list number)))
-
-(defsubst elmo-create-folder-dop (folder)
- (elmo-dop-queue-append folder 'elmo-folder-create nil))
-
-(defsubst elmo-folder-mark-as-read-dop (folder numbers)
- (elmo-dop-queue-append folder 'elmo-folder-mark-as-read (list numbers)))
-
-(defsubst elmo-folder-unmark-read-dop (folder numbers)
- (elmo-dop-queue-append folder 'elmo-folder-unmark-read (list numbers)))
-
-(defsubst elmo-folder-mark-as-important-dop (folder numbers)
- (elmo-dop-queue-append folder 'elmo-folder-mark-as-important (list numbers)))
-
-(defsubst elmo-folder-unmark-important-dop (folder numbers)
- (elmo-dop-queue-append folder 'elmo-folder-unmark-important (list numbers)))
+ (let ((spool-folder (elmo-dop-spool-folder folder))
+ queue)
+ (dolist (number numbers)
+ (if (< number 0)
+ (elmo-folder-delete-messages spool-folder
+ (list (abs number))) ; delete from queue
+ (setq queue (cons number queue))))
+ (when queue
+ (elmo-dop-queue-append folder 'elmo-folder-delete-messages-dop-delayed
+ (list
+ (mapcar
+ (lambda (number)
+ (cons number (elmo-message-field
+ folder number 'message-id)))
+ queue))))
+ t))
+
+(defsubst elmo-message-encache-dop (folder number &optional read)
+ (elmo-dop-queue-append folder 'elmo-message-encache (list number read)))
+
+(defsubst elmo-folder-create-dop (folder)
+ (elmo-dop-queue-append folder 'elmo-folder-create-dop-delayed nil))
+
+(defsubst elmo-folder-set-flag-dop (folder numbers flag)
+ (when (setq numbers (elmo-dop-filter-pending-messages numbers))
+ (let ((method (case flag
+ (unread
+ 'elmo-folder-unset-read-delayed)
+ (read
+ 'elmo-folder-set-read-delayed)
+ (important
+ 'elmo-folder-set-important-delayed)
+ (answered
+ 'elmo-folder-set-answered-delayed))))
+ (if method
+ (elmo-dop-queue-append folder method (list numbers))
+ (elmo-dop-queue-append folder 'elmo-folder-set-flag
+ (list numbers flag))))))
+
+(defsubst elmo-folder-unset-flag-dop (folder numbers flag)
+ (when (setq numbers (elmo-dop-filter-pending-messages numbers))
+ (let ((method (case flag
+ (unread
+ 'elmo-folder-set-read-delayed)
+ (read
+ 'elmo-folder-unset-read-delayed)
+ (important
+ 'elmo-folder-unset-important-delayed)
+ (answered
+ 'elmo-folder-unset-answered-delayed))))
+ (if method
+ (elmo-dop-queue-append folder method (list numbers))
+ (elmo-dop-queue-append folder 'elmo-folder-unset-flag
+ (list numbers flag))))))