change.
(wl-summary-sync-marks): Ditto.
(wl-summary-mark-as-read-internal): Ditto.
(wl-summary-mark-as-answered-internal): Ditto.
(wl-summary-mark-as-important-internal): Ditto.
(wl-summary-reply): Ditto.
* wl-draft.el (wl-draft-kill): Use `elmo-folder-unset-flag'
instead of `elmo-folder-unflag-answered'.
* elmo-pipe.el (elmo-folder-list-unreads,
elmo-folder-list-answereds,
elmo-folder-list-importants,
elmo-folder-flag-as-important,
elmo-folder-unflag-important,
elmo-folder-flag-as-read,
elmo-folder-unflag-read,
elmo-folder-flag-as-answered,
elmo-folder-unflag-answered): Remove.
(elmo-folder-set-flag): Define.
(elmo-folder-unset-flag): Ditto.
* elmo-nntp.el (elmo-folder-flag-as-read): Remove.
(elmo-folder-set-flag): Define.
(elmo-folder-unset-flag): Ditto.
(elmo-folder-list-unreads): Remove.
(elmo-folder-list-flagged): Define.
* elmo-net.el (elmo-folder-list-flagged-internal): Define.
(elmo-folder-list-unreads,
elmo-folder-list-importants,
elmo-folder-list-answereds,
elmo-folder-list-unreads-plugged,
elmo-folder-list-importants-plugged,
elmo-folder-list-answereds-plugged): Remove.
(elmo-folder-list-flagged-plugged): New method.
(elmo-folder-unflag-important,
elmo-folder-flag-as-important,
elmo-folder-unflag-read,
elmo-folder-flag-as-read,
elmo-folder-unflag-answered,
elmo-folder-flag-as-answered,
elmo-folder-flag-as-read-unplugged,
elmo-folder-unflag-read-unplugged,
elmo-folder-flag-as-important-unplugged,
elmo-folder-unflag-important-unplugged,
elmo-folder-flag-as-answered-unplugged,
elmo-folder-unflag-answered-unplugged): Remove.
(elmo-folder-set-flag): Define.
(elmo-folder-unset-flag): Ditto.
(elmo-folder-set-flag-unplugged): Ditto.
(elmo-folder-unset-flag-unplugged): Ditto.
* elmo-multi.el (elmo-folder-list-unreads,
elmo-folder-list-answereds,
elmo-folder-list-importants,
elmo-folder-flag-as-important,
elmo-folder-unflag-important,
elmo-folder-flag-as-read,
elmo-folder-unflag-read,
elmo-folder-flag-as-answered,
elmo-folder-unflag-answered): Remove.
(elmo-folder-set-flag): Define.
(elmo-folder-unset-flag): Ditto.
* elmo-map.el (elmo-map-folder-unflag-important,
elmo-map-folder-flag-as-important,
elmo-map-folder-unflag-read,
elmo-map-folder-flag-as-read,
elmo-map-folder-unflag-answered,
elmo-map-folder-flag-as-answered): Remove.
(elmo-map-folder-set-flag): New method.
(elmo-map-folder-unset-flag): Ditto.
(elmo-map-folder-list-unreads,
elmo-map-folder-list-importants,
elmo-map-folder-list-answereds): Remove.
(elmo-folder-list-flagged-internal): Define.
(elmo-map-folder-list-flagged): New method.
* elmo-maildir.el (elmo-maildir-flag-specs): New internal variable.
(elmo-map-folder-list-unreads,
elmo-map-folder-list-importants,
elmo-map-folder-list-flagged): Remove.
(elmo-map-folder-list-flagged): Define.
(elmo-map-folder-flag-as-important,
elmo-map-folder-unflag-important,
elmo-map-folder-flag-as-read,
elmo-map-folder-unflag-read,
elmo-map-folder-flag-as-answered,
elmo-map-folder-unflag-answered): Remove.
(elmo-maildir-set-mark-messages): New internal function.
(elmo-map-folder-set-flag): Define.
(elmo-map-folder-unset-flag): Ditto.
* elmo.el (toplevel): Added autoload setting for
`elmo-folder-list-global-flag-messages'.
(elmo-folder-list-unreads,
elmo-folder-list-importants,
elmo-folder-list-answereds): Remove.
(elmo-folder-list-flagged): Use `elmo-folder-list-flagged-internal'.
Return a list whitch merged with messages have global flag.
(elmo-folder-list-flagged-internal): New method.
(elmo-folder-unflag-important,
elmo-folder-flag-as-important,
elmo-folder-unflag-read,
elmo-folder-flag-as-read,
elmo-folder-unflag-answered,
elmo-folder-flag-as-answered): Remove.
(elmo-folder-set-flag): New method.
(elmo-folder-unset-flag): Ditto.
(elmo-message-set-flag):Use `elmo-folder-set-flag'.
(elmo-message-unset-flag):Use `elmo-folder-unset-flag'.
* elmo-imap4.el (elmo-imap4-flag-specs): New internal variable.
(elmo-folder-list-unreads-plugged,
elmo-folder-list-importants-plugged,
elmo-folder-list-answereds-plugged,
elmo-folder-list-flagged-unplugged,
elmo-folder-unflag-important-plugged,
elmo-folder-flag-as-important-plugged,
elmo-folder-unflag-read-plugged,
elmo-folder-flag-as-read-plugged,
elmo-folder-unflag-answered-plugged,
elmo-folder-flag-as-answered-plugged): Remove.
(elmo-folder-set-flag-plugged,
elmo-folder-unset-flag-plugged): Define.
* elmo-flag.el (elmo-folder-initialize): Register to
`elmo-global-flag-list' if flag is not global.
(elmo-folder-append-messages): Set flag to source messages.
* elmo-filter.el (elmo-filter-folder-list-unreads,
elmo-folder-list-unreads,
elmo-filter-folder-list-importants,
elmo-folder-list-importants,
elmo-folder-flag-as-read,
elmo-folder-unflag-read,
elmo-folder-flag-as-important,
elmo-folder-unflag-important,
elmo-folder-flag-as-answered,
elmo-folder-unflag-answered): Remove.
(elmo-folder-set-flag): Define.
(elmo-folder-unset-flag): Ditto.
* elmo-dop.el (elmo-folder-flag-as-read-dop,
elmo-folder-unflag-read-dop,
elmo-folder-flag-as-important-dop,
elmo-folder-unflag-important-dop,
elmo-folder-flag-as-answered-dop,
elmo-folder-unflag-answered-dop): Remove.
(elmo-folder-set-flag-dop,
elmo-folder-unset-flag-dop,
elmo-folder-set-important-delayed,
elmo-folder-unset-important-delayed,
elmo-folder-set-read-delayed,
elmo-folder-unset-read-delayed,
elmo-folder-set-answered-delayed,
elmo-folder-unset-answered-delayed): New function.
(elmo-dop-queue-merge-method-list): Follow the above chagned.
(elmo-dop-queue-method-name-alist): Ditto.
2004-01-11 Hiroya Murata <lapis-lazuli@pop06.odn.ne.jp>
+ * elmo-pipe.el (elmo-folder-list-unreads,
+ elmo-folder-list-answereds,
+ elmo-folder-list-importants,
+ elmo-folder-flag-as-important,
+ elmo-folder-unflag-important,
+ elmo-folder-flag-as-read,
+ elmo-folder-unflag-read,
+ elmo-folder-flag-as-answered,
+ elmo-folder-unflag-answered): Remove.
+ (elmo-folder-set-flag): Define.
+ (elmo-folder-unset-flag): Ditto.
+
+ * elmo-nntp.el (elmo-folder-flag-as-read): Remove.
+ (elmo-folder-set-flag): Define.
+ (elmo-folder-unset-flag): Ditto.
+ (elmo-folder-list-unreads): Remove.
+ (elmo-folder-list-flagged): Define.
+
+ * elmo-net.el (elmo-folder-list-flagged-internal): Define.
+ (elmo-folder-list-unreads,
+ elmo-folder-list-importants,
+ elmo-folder-list-answereds,
+ elmo-folder-list-unreads-plugged,
+ elmo-folder-list-importants-plugged,
+ elmo-folder-list-answereds-plugged): Remove.
+ (elmo-folder-list-flagged-plugged): New method.
+ (elmo-folder-unflag-important,
+ elmo-folder-flag-as-important,
+ elmo-folder-unflag-read,
+ elmo-folder-flag-as-read,
+ elmo-folder-unflag-answered,
+ elmo-folder-flag-as-answered,
+ elmo-folder-flag-as-read-unplugged,
+ elmo-folder-unflag-read-unplugged,
+ elmo-folder-flag-as-important-unplugged,
+ elmo-folder-unflag-important-unplugged,
+ elmo-folder-flag-as-answered-unplugged,
+ elmo-folder-unflag-answered-unplugged): Remove.
+ (elmo-folder-set-flag): Define.
+ (elmo-folder-unset-flag): Ditto.
+ (elmo-folder-set-flag-unplugged): Ditto.
+ (elmo-folder-unset-flag-unplugged): Ditto.
+
+ * elmo-multi.el (elmo-folder-list-unreads,
+ elmo-folder-list-answereds,
+ elmo-folder-list-importants,
+ elmo-folder-flag-as-important,
+ elmo-folder-unflag-important,
+ elmo-folder-flag-as-read,
+ elmo-folder-unflag-read,
+ elmo-folder-flag-as-answered,
+ elmo-folder-unflag-answered): Remove.
+ (elmo-folder-set-flag): Define.
+ (elmo-folder-unset-flag): Ditto.
+
+ * elmo-map.el (elmo-map-folder-unflag-important,
+ elmo-map-folder-flag-as-important,
+ elmo-map-folder-unflag-read,
+ elmo-map-folder-flag-as-read,
+ elmo-map-folder-unflag-answered,
+ elmo-map-folder-flag-as-answered): Remove.
+ (elmo-map-folder-set-flag): New method.
+ (elmo-map-folder-unset-flag): Ditto.
+ (elmo-map-folder-list-unreads,
+ elmo-map-folder-list-importants,
+ elmo-map-folder-list-answereds): Remove.
+ (elmo-folder-list-flagged-internal): Define.
+ (elmo-map-folder-list-flagged): New method.
+
+ * elmo-maildir.el (elmo-maildir-flag-specs): New internal variable.
+ (elmo-map-folder-list-unreads,
+ elmo-map-folder-list-importants,
+ elmo-map-folder-list-flagged): Remove.
+ (elmo-map-folder-list-flagged): Define.
+ (elmo-map-folder-flag-as-important,
+ elmo-map-folder-unflag-important,
+ elmo-map-folder-flag-as-read,
+ elmo-map-folder-unflag-read,
+ elmo-map-folder-flag-as-answered,
+ elmo-map-folder-unflag-answered): Remove.
+ (elmo-maildir-set-mark-messages): New internal function.
+ (elmo-map-folder-set-flag): Define.
+ (elmo-map-folder-unset-flag): Ditto.
+
+ * elmo.el (toplevel): Added autoload setting for
+ `elmo-folder-list-global-flag-messages'.
+ (elmo-folder-list-unreads,
+ elmo-folder-list-importants,
+ elmo-folder-list-answereds): Remove.
+ (elmo-folder-list-flagged): Use `elmo-folder-list-flagged-internal'.
+ Return a list whitch merged with messages have global flag.
+ (elmo-folder-list-flagged-internal): New method.
+ (elmo-folder-unflag-important,
+ elmo-folder-flag-as-important,
+ elmo-folder-unflag-read,
+ elmo-folder-flag-as-read,
+ elmo-folder-unflag-answered,
+ elmo-folder-flag-as-answered): Remove.
+ (elmo-folder-set-flag): New method.
+ (elmo-folder-unset-flag): Ditto.
+ (elmo-message-set-flag):Use `elmo-folder-set-flag'.
+ (elmo-message-unset-flag):Use `elmo-folder-unset-flag'.
+
+ * elmo-imap4.el (elmo-imap4-flag-specs): New internal variable.
+ (elmo-folder-list-unreads-plugged,
+ elmo-folder-list-importants-plugged,
+ elmo-folder-list-answereds-plugged,
+ elmo-folder-list-flagged-unplugged,
+ elmo-folder-unflag-important-plugged,
+ elmo-folder-flag-as-important-plugged,
+ elmo-folder-unflag-read-plugged,
+ elmo-folder-flag-as-read-plugged,
+ elmo-folder-unflag-answered-plugged,
+ elmo-folder-flag-as-answered-plugged): Remove.
+ (elmo-folder-set-flag-plugged,
+ elmo-folder-unset-flag-plugged): Define.
+
+ * elmo-flag.el (elmo-folder-initialize): Register to
+ `elmo-global-flag-list' if flag is not global.
+ (elmo-folder-append-messages): Set flag to source messages.
+
+ * elmo-filter.el (elmo-filter-folder-list-unreads,
+ elmo-folder-list-unreads,
+ elmo-filter-folder-list-importants,
+ elmo-folder-list-importants,
+ elmo-folder-flag-as-read,
+ elmo-folder-unflag-read,
+ elmo-folder-flag-as-important,
+ elmo-folder-unflag-important,
+ elmo-folder-flag-as-answered,
+ elmo-folder-unflag-answered): Remove.
+ (elmo-folder-set-flag): Define.
+ (elmo-folder-unset-flag): Ditto.
+
+ * elmo-dop.el (elmo-folder-flag-as-read-dop,
+ elmo-folder-unflag-read-dop,
+ elmo-folder-flag-as-important-dop,
+ elmo-folder-unflag-important-dop,
+ elmo-folder-flag-as-answered-dop,
+ elmo-folder-unflag-answered-dop): Remove.
+ (elmo-folder-set-flag-dop,
+ elmo-folder-unset-flag-dop,
+ elmo-folder-set-important-delayed,
+ elmo-folder-unset-important-delayed,
+ elmo-folder-set-read-delayed,
+ elmo-folder-unset-read-delayed,
+ elmo-folder-set-answered-delayed,
+ elmo-folder-unset-answered-delayed): New function.
+ (elmo-dop-queue-merge-method-list): Follow the above chagned.
+ (elmo-dop-queue-method-name-alist): Ditto.
+
* elmo-version.el (elmo-version): Up to 2.11.23.
2004-01-11 Yuuichi Teranishi <teranisi@gohome.org>
(setq elmo-dop-queue (nconc elmo-dop-queue (list queue)))))
(defvar elmo-dop-queue-merge-method-list
- '(elmo-folder-flag-as-read
- elmo-folder-unflag-read
- elmo-folder-flag-as-important
- elmo-folder-unflag-important
- elmo-folder-flag-as-answered
- elmo-folder-unflag-answered))
+ '(elmo-folder-set-read-delayed
+ elmo-folder-unset-read-delayed
+ elmo-folder-set-important-delayed
+ elmo-folder-unset-important-delayed
+ elmo-folder-set-answered-delayed
+ elmo-folder-unset-answered-delayed))
(defvar elmo-dop-queue-method-name-alist
'((elmo-folder-append-buffer-dop-delayed . "Append")
(elmo-folder-delete-messages-dop-delayed . "Delete")
(elmo-message-encache . "Encache")
(elmo-folder-create-dop-delayed . "Create")
- (elmo-folder-flag-as-read . "Read")
- (elmo-folder-unflag-read . "Unread")
- (elmo-folder-flag-as-answered . "Answered")
- (elmo-folder-unflag-answered . "Unanswered")
- (elmo-folder-flag-as-important . "Important")
- (elmo-folder-unflag-important . "Unimportant")))
+ (elmo-folder-set-read-delayed . "Read")
+ (elmo-folder-unset-read-delayed . "Unread")
+ (elmo-folder-set-answered-delayed . "Answered")
+ (elmo-folder-unset-answered-delayed . "Unanswered")
+ (elmo-folder-set-important-delayed . "Important")
+ (elmo-folder-unset-important-delayed . "Unimportant")
+ (elmo-folder-set-flag . "Set flag")
+ (elmo-folder-unset-flag . "Unset flag")))
(defmacro elmo-dop-queue-method-name (queue)
`(cdr (assq (elmo-dop-queue-method ,queue)
(defsubst elmo-folder-create-dop (folder)
(elmo-dop-queue-append folder 'elmo-folder-create-dop-delayed nil))
-(defsubst elmo-folder-flag-as-read-dop (folder numbers)
- (elmo-dop-queue-append folder 'elmo-folder-flag-as-read (list numbers)))
-
-(defsubst elmo-folder-unflag-read-dop (folder numbers)
- (elmo-dop-queue-append folder 'elmo-folder-unflag-read (list numbers)))
-
-(defsubst elmo-folder-flag-as-important-dop (folder numbers)
- (elmo-dop-queue-append folder 'elmo-folder-flag-as-important (list numbers)))
-
-(defsubst elmo-folder-unflag-important-dop (folder numbers)
- (elmo-dop-queue-append folder 'elmo-folder-unflag-important (list numbers)))
-
-(defsubst elmo-folder-flag-as-answered-dop (folder numbers)
- (elmo-dop-queue-append folder 'elmo-folder-flag-as-answered (list numbers)))
-
-(defsubst elmo-folder-unflag-answered-dop (folder numbers)
- (elmo-dop-queue-append folder 'elmo-folder-unflag-answered (list numbers)))
+(defsubst elmo-folder-set-flag-dop (folder numbers flag)
+ (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)
+ (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)))))
;;; Execute as subsutitute for plugged operation.
(defun elmo-folder-status-dop (folder)
(unless (elmo-folder-exists-p folder)
(elmo-folder-create folder)))
+(defun elmo-folder-set-important-delayed (folder numbers)
+ (elmo-folder-set-flag folder numbers 'important))
+
+(defun elmo-folder-unset-important-delayed (folder numbers)
+ (elmo-folder-unset-flag folder numbers 'important))
+
+(defun elmo-folder-set-read-delayed (folder numbers)
+ (elmo-folder-set-flag folder numbers 'read))
+
+(defun elmo-folder-unset-read-delayed (folder numbers)
+ (elmo-folder-unset-flag folder numbers 'read))
+
+(defun elmo-folder-set-answered-delayed (folder numbers)
+ (elmo-folder-set-flag folder numbers 'answered))
+
+(defun elmo-folder-unset-answered-delayed (folder numbers)
+ (elmo-folder-unset-flag folder numbers 'answered))
+
;;; Util
(defun elmo-dop-msgdb (msgdb)
(let ((new-db (elmo-make-msgdb))
;; not available
t)))
-(defsubst elmo-filter-folder-list-unreads (folder)
- (elmo-list-filter
- (elmo-folder-list-messages folder nil 'in-msgdb)
- (elmo-folder-list-unreads
- (elmo-filter-folder-target-internal folder))))
-
-(luna-define-method elmo-folder-list-unreads :around ((folder
- elmo-filter-folder))
- (if (elmo-filter-folder-require-msgdb-internal folder)
- (elmo-filter-folder-list-unreads folder)
- (luna-call-next-method)))
-
-(defsubst elmo-filter-folder-list-importants (folder)
- (elmo-list-filter
- (elmo-folder-list-messages folder nil 'in-msgdb)
- (elmo-folder-list-importants
- (elmo-filter-folder-target-internal folder))))
-
-(luna-define-method elmo-folder-list-importants :around ((folder
- elmo-filter-folder))
- (if (elmo-filter-folder-require-msgdb-internal folder)
- (elmo-filter-folder-list-importants folder)
- (luna-call-next-method)))
-
(luna-define-method elmo-folder-list-subfolders ((folder elmo-filter-folder)
&optional one-level)
(let* ((target (elmo-filter-folder-target-internal folder))
(elmo-message-file-name (elmo-filter-folder-target-internal folder)
number))
-(luna-define-method elmo-folder-flag-as-read :around ((folder
- elmo-filter-folder)
- numbers
- &optional is-local)
- (elmo-folder-flag-as-read (elmo-filter-folder-target-internal folder)
- numbers is-local)
- (luna-call-next-method))
-
-(luna-define-method elmo-folder-unflag-read :around ((folder
- elmo-filter-folder)
- numbers
- &optional is-local)
- (elmo-folder-unflag-read (elmo-filter-folder-target-internal folder)
- numbers is-local)
- (luna-call-next-method))
-
-(luna-define-method elmo-folder-flag-as-important :around ((folder
- elmo-filter-folder)
- numbers
- &optional
- is-local)
- (elmo-folder-flag-as-important (elmo-filter-folder-target-internal folder)
- numbers is-local)
- (luna-call-next-method))
-
-(luna-define-method elmo-folder-unflag-important :around ((folder
- elmo-filter-folder)
- numbers
- &optional
- is-local)
- (elmo-folder-unflag-important (elmo-filter-folder-target-internal folder)
- numbers is-local)
- (luna-call-next-method))
-
-(luna-define-method elmo-folder-flag-as-answered :around ((folder
- elmo-filter-folder)
- numbers
- &optional
- is-local)
- (elmo-folder-flag-as-answered (elmo-filter-folder-target-internal folder)
- numbers is-local)
- (luna-call-next-method))
-
-
-(luna-define-method elmo-folder-unflag-answered :around ((folder
- elmo-filter-folder)
- numbers
- &optional
- is-local)
- (elmo-folder-unflag-answered (elmo-filter-folder-target-internal folder)
- numbers is-local)
- (luna-call-next-method))
+(luna-define-method elmo-folder-set-flag :before ((folder elmo-filter-folder)
+ numbers
+ flag
+ &optional is-local)
+ (elmo-folder-set-flag (elmo-filter-folder-target-internal folder)
+ numbers flag is-local))
+
+(luna-define-method elmo-folder-unset-flag :before ((folder elmo-filter-folder)
+ numbers
+ flag
+ &optional is-local)
+ (elmo-folder-unset-flag (elmo-filter-folder-target-internal folder)
+ numbers flag is-local))
(require 'product)
(product-provide (provide 'elmo-filter) (require 'elmo-version))
(setq name (match-string 1 name))
(setq name (symbol-name (car elmo-global-flag-list))))
(or (cdr (assq (intern name) elmo-global-flag-folder-alist))
- (let (msgdb-path)
- (elmo-flag-folder-set-flag-internal folder (intern name))
+ (let ((flag (intern name))
+ msgdb-path)
+ (elmo-flag-folder-set-flag-internal folder flag)
+ (unless (elmo-global-flag-p flag)
+ (setq elmo-global-flag-list
+ (nconc elmo-global-flag-list (list flag))))
;; must be AFTER set flag slot.
(setq msgdb-path (elmo-folder-msgdb-path folder))
(unless (file-directory-p msgdb-path)
src-folder
number
'message-id)))
+ (elmo-folder-set-flag src-folder
+ numbers
+ (elmo-flag-folder-flag-internal folder))
numbers)
(luna-define-method elmo-folder-append-buffer ((folder elmo-flag-folder)
(defconst elmo-imap4-literal-threshold 1024
"Limitation of characters that can be used in a quoted string.")
+(defconst elmo-imap4-flag-specs '((important "\\Flagged")
+ (read "\\Seen")
+ (unread "\\Seen" 'remove)
+ (answered "\\Answered")))
+
;; For debugging.
(defvar elmo-imap4-debug nil
"Non-nil forces IMAP4 folder as debug mode.
(format "uid %d:*" (cdr (car killed)))
"all"))))
-(luna-define-method elmo-folder-list-unreads-plugged
- ((folder elmo-imap4-folder))
- (elmo-imap4-folder-list-flagged folder 'unread))
-
-(luna-define-method elmo-folder-list-importants-plugged
- ((folder elmo-imap4-folder))
- (elmo-imap4-folder-list-flagged folder 'important))
-
-(luna-define-method elmo-folder-list-answereds-plugged
- ((folder elmo-imap4-folder))
- (elmo-imap4-folder-list-flagged folder 'answered))
+(luna-define-method elmo-folder-list-flagged-unplugged
+ ((folder elmo-imap4-folder) flag)
+ (elmo-imap4-folder-list-flagged folder flag))
(luna-define-method elmo-folder-use-flag-p ((folder elmo-imap4-folder))
(not (string-match elmo-imap4-disuse-server-flag-mailbox-regexp
'message-id)))
elmo-imap4-current-msgdb))))
-(luna-define-method elmo-folder-unflag-important-plugged
- ((folder elmo-imap4-folder) numbers)
- (elmo-imap4-set-flag folder numbers "\\Flagged" 'remove))
-
-(luna-define-method elmo-folder-flag-as-important-plugged
- ((folder elmo-imap4-folder) numbers)
- (elmo-imap4-set-flag folder numbers "\\Flagged"))
-
-(luna-define-method elmo-folder-unflag-read-plugged
- ((folder elmo-imap4-folder) numbers)
- (elmo-imap4-set-flag folder numbers "\\Seen" 'remove))
-
-(luna-define-method elmo-folder-flag-as-read-plugged
- ((folder elmo-imap4-folder) numbers)
- (elmo-imap4-set-flag folder numbers "\\Seen"))
-
-(luna-define-method elmo-folder-unflag-answered-plugged
- ((folder elmo-imap4-folder) numbers)
- (elmo-imap4-set-flag folder numbers "\\Answered" 'remove))
-
-(luna-define-method elmo-folder-flag-as-answered-plugged
- ((folder elmo-imap4-folder) numbers)
- (elmo-imap4-set-flag folder numbers "\\Answered"))
+(luna-define-method elmo-folder-set-flag-plugged ((folder elmo-imap4-folder)
+ numbers flag)
+ (let ((spec (cdr (assq flag elmo-imap4-flag-specs))))
+ (when spec
+ (elmo-imap4-set-flag folder numbers (car spec) (cdr spec)))))
+
+(luna-define-method elmo-folder-unset-flag-plugged ((folder elmo-imap4-folder)
+ numbers flag)
+ (let ((spec (cdr (assq flag elmo-imap4-flag-specs))))
+ (when spec
+ (elmo-imap4-set-flag folder numbers (car spec) (not (cdr spec))))))
(luna-define-method elmo-message-use-cache-p ((folder elmo-imap4-folder)
number)
:type 'directory
:group 'elmo)
+(defconst elmo-maildir-flag-specs '((important ?F)
+ (read ?S)
+ (unread ?S 'remove)
+ (answered ?R)))
+
;;; ELMO Maildir folder
(eval-and-compile
(luna-define-class elmo-maildir-folder
(elmo-maildir-folder-set-answered-locations-internal folder (nth 3 locs))
(nth 0 locs)))
-(luna-define-method elmo-map-folder-list-unreads
- ((folder elmo-maildir-folder))
- (elmo-maildir-folder-unread-locations-internal folder))
-
-(luna-define-method elmo-map-folder-list-importants
- ((folder elmo-maildir-folder))
- (elmo-maildir-folder-flagged-locations-internal folder))
-
-(luna-define-method elmo-map-folder-list-answereds
- ((folder elmo-maildir-folder))
- (elmo-maildir-folder-answered-locations-internal folder))
+(luna-define-method elmo-map-folder-list-flagged ((folder elmo-maildir-folder)
+ flag)
+ (case flag
+ (unread
+ (elmo-maildir-folder-unread-locations-internal folder))
+ (important
+ (elmo-maildir-folder-flagged-locations-internal folder))
+ (answered
+ (elmo-maildir-folder-answered-locations-internal folder))
+ (otherwise
+ t)))
(luna-define-method elmo-folder-msgdb-create ((folder elmo-maildir-folder)
numbers flag-table)
mark))
t)
-(luna-define-method elmo-map-folder-flag-as-important ((folder elmo-maildir-folder)
- locs)
- (elmo-maildir-set-mark-msgs folder locs ?F))
-
-(luna-define-method elmo-map-folder-unflag-important ((folder elmo-maildir-folder)
- locs)
- (elmo-maildir-delete-mark-msgs folder locs ?F))
-
-(luna-define-method elmo-map-folder-flag-as-read ((folder elmo-maildir-folder)
- locs)
- (elmo-maildir-set-mark-msgs folder locs ?S))
-
-(luna-define-method elmo-map-folder-unflag-read ((folder elmo-maildir-folder)
- locs)
- (elmo-maildir-delete-mark-msgs folder locs ?S))
-
-(luna-define-method elmo-map-folder-flag-as-answered ((folder
- elmo-maildir-folder)
- locs)
- (elmo-maildir-set-mark-msgs folder locs ?R))
-
-(luna-define-method elmo-map-folder-unflag-answered ((folder
- elmo-maildir-folder)
- locs)
- (elmo-maildir-delete-mark-msgs folder locs ?R))
+(defsubst elmo-maildir-set-mark-messages (folder locations mark remove)
+ (when mark
+ (if remove
+ (elmo-maildir-delete-mark-msgs folder locations mark)
+ (elmo-maildir-set-mark-msgs folder locations mark))))
+
+(luna-define-method elmo-map-folder-set-flag ((folder elmo-maildir-folder)
+ locations flag)
+ (let ((spec (assq flag elmo-maildir-flag-specs)))
+ (elmo-maildir-set-mark-messages folder locations (car spec) (cdr spec))))
+
+(luna-define-method elmo-map-folder-unset-flag ((folder elmo-maildir-folder)
+ locations flag)
+ (let ((spec (assq flag elmo-maildir-flag-specs)))
+ (elmo-maildir-set-mark-messages folder locations
+ (car spec) (not (cdr spec)))))
(luna-define-method elmo-folder-list-subfolders
((folder elmo-maildir-folder) &optional one-level)
(luna-define-generic elmo-map-folder-list-message-locations (folder)
"Return a location list of the FOLDER.")
-(luna-define-generic elmo-map-folder-unflag-important (folder locations)
- "")
-
-(luna-define-generic elmo-map-folder-flag-as-important (folder locations)
- "")
-
-(luna-define-generic elmo-map-folder-unflag-read (folder locations)
- "")
+(luna-define-generic elmo-map-folder-set-flag (folder locations flag)
+ "Set FLAG to LOCATIONS.")
-(luna-define-generic elmo-map-folder-flag-as-read (folder locations)
- "")
-
-(luna-define-generic elmo-map-folder-unflag-answered (folder locations)
- "")
-
-(luna-define-generic elmo-map-folder-flag-as-answered (folder locations)
- "")
+(luna-define-generic elmo-map-folder-unset-flag (folder locations flag)
+ "Unset FLAG from LOCATIONS.")
(luna-define-generic elmo-map-message-fetch (folder location
strategy
unseen)
"")
-(luna-define-generic elmo-map-folder-list-unreads (folder)
- "")
-
-(luna-define-method elmo-map-folder-list-unreads ((folder elmo-map-folder))
- t)
-
-(luna-define-generic elmo-map-folder-list-importants (folder)
- "")
-
-(luna-define-method elmo-map-folder-list-importants ((folder elmo-map-folder))
- t)
-
-(luna-define-generic elmo-map-folder-list-answereds (folder)
- "")
-
-(luna-define-method elmo-map-folder-list-answereds ((folder elmo-map-folder))
- t)
-
(luna-define-generic elmo-map-folder-delete-messages (folder locations)
"")
((folder elmo-map-folder) &optional nohide)
(mapcar 'car (elmo-map-folder-location-alist-internal folder)))
-(luna-define-method elmo-folder-unflag-important :before ((folder
- elmo-map-folder)
- numbers
- &optional
- is-local)
- (unless is-local
- (elmo-map-folder-unflag-important
- folder
- (elmo-map-folder-numbers-to-locations folder numbers))))
-
-(luna-define-method elmo-folder-flag-as-important :before ((folder
- elmo-map-folder)
- numbers
- &optional
- is-local)
- (unless is-local
- (elmo-map-folder-flag-as-important
- folder
- (elmo-map-folder-numbers-to-locations folder numbers))))
-
-(luna-define-method elmo-folder-unflag-read :before ((folder elmo-map-folder)
- numbers
- &optional is-local)
+(luna-define-method elmo-folder-set-flag :before ((folder elmo-map-folder)
+ numbers
+ flag
+ &optional is-local)
(unless is-local
- (elmo-map-folder-unflag-read
+ (elmo-map-folder-set-flag
folder
- (elmo-map-folder-numbers-to-locations folder numbers))))
+ (elmo-map-folder-numbers-to-locations folder numbers)
+ flag)))
-(luna-define-method elmo-folder-flag-as-read :before ((folder
- elmo-map-folder)
- numbers
- &optional is-local)
+(luna-define-method elmo-folder-unset-flag :before ((folder elmo-map-folder)
+ numbers
+ flag
+ &optional is-local)
(unless is-local
- (elmo-map-folder-flag-as-read
+ (elmo-map-folder-unset-flag
folder
- (elmo-map-folder-numbers-to-locations folder numbers))))
-
-(luna-define-method elmo-folder-unflag-answered :before ((folder
- elmo-map-folder)
- numbers
- &optional is-local)
- (elmo-map-folder-unflag-answered
- folder
- (elmo-map-folder-numbers-to-locations folder numbers)))
-
-(luna-define-method elmo-folder-flag-as-answered :before ((folder
- elmo-map-folder)
- numbers
- &optional is-local)
- (elmo-map-folder-flag-as-answered
- folder
- (elmo-map-folder-numbers-to-locations folder numbers)))
+ (elmo-map-folder-numbers-to-locations folder numbers)
+ flag)))
(luna-define-method elmo-message-fetch-internal ((folder elmo-map-folder)
number strategy
(elmo-map-message-location folder number)
strategy section unread))
-(luna-define-method elmo-folder-list-unreads :around ((folder elmo-map-folder))
- (let ((locations (elmo-map-folder-list-unreads folder)))
+(luna-define-method elmo-folder-list-flagged-internal ((folder elmo-map-folder)
+ flag)
+ (let ((locations (elmo-map-folder-list-flagged folder flag)))
(if (listp locations)
(elmo-map-folder-locations-to-numbers folder locations)
- (luna-call-next-method))))
+ t)))
-(luna-define-method elmo-folder-list-importants :around ((folder
- elmo-map-folder))
- (let ((locations (elmo-map-folder-list-importants folder)))
- (if (listp locations)
- (elmo-map-folder-locations-to-numbers folder locations)
- (luna-call-next-method))))
+(luna-define-generic elmo-map-folder-list-flagged (folder flag)
+ "Return a list of message location in the FOLDER with FLAG.
+Return t if the message list is not available.")
-(luna-define-method elmo-folder-list-answereds :around ((folder
- elmo-map-folder))
- (let ((locations (elmo-map-folder-list-answereds folder)))
- (if (listp locations)
- (elmo-map-folder-locations-to-numbers folder locations)
- (luna-call-next-method))))
+(luna-define-method elmo-map-folder-list-flagged ((folder elmo-map-folder)
+ flag)
+ t)
(luna-define-method elmo-folder-delete-messages ((folder elmo-map-folder)
numbers)
(cons news alls)
(list news unreads alls))))
-(luna-define-method elmo-folder-list-unreads ((folder elmo-multi-folder))
- (let ((cur-number 0)
- unreads)
- (dolist (child (elmo-multi-folder-children-internal folder))
- (setq cur-number (+ cur-number 1))
- (setq unreads
- (nconc
- unreads
- (mapcar (lambda (x)
- (+ x (* cur-number
- (elmo-multi-folder-divide-number-internal
- folder))))
- (elmo-folder-list-unreads child)))))
- unreads))
-
-(luna-define-method elmo-folder-list-answereds ((folder elmo-multi-folder))
- (let ((cur-number 0)
- answereds)
- (dolist (child (elmo-multi-folder-children-internal folder))
- (setq cur-number (+ cur-number 1))
- (setq answereds
- (nconc
- answereds
- (mapcar (lambda (x)
- (+ x (* cur-number
- (elmo-multi-folder-divide-number-internal
- folder))))
- (elmo-folder-list-answereds child)))))
- answereds))
-
-(luna-define-method elmo-folder-list-importants ((folder elmo-multi-folder))
- (let ((cur-number 0)
- importants)
- (dolist (child (elmo-multi-folder-children-internal folder))
- (setq cur-number (+ cur-number 1))
- (setq importants
- (nconc
- importants
- (mapcar (lambda (x)
- (+ x (* cur-number
- (elmo-multi-folder-divide-number-internal
- folder))))
- (elmo-folder-list-importants child)))))
- importants))
-
(luna-define-method elmo-folder-list-messages
((folder elmo-multi-folder) &optional visible-only in-msgdb)
(let* ((flds (elmo-multi-folder-children-internal folder))
(setq msg-list (cdr msg-list)))
ret-val))
-(luna-define-method elmo-folder-flag-as-important ((folder
- elmo-multi-folder)
- numbers
- &optional
- is-local)
- (dolist (folder-numbers (elmo-multi-make-folder-numbers-list folder numbers))
- (elmo-folder-flag-as-important (car folder-numbers)
- (cdr folder-numbers)
- is-local)))
-
-(luna-define-method elmo-folder-unflag-important ((folder
- elmo-multi-folder)
- numbers
- &optional
- is-local)
- (dolist (folder-numbers (elmo-multi-make-folder-numbers-list folder numbers))
- (elmo-folder-unflag-important (car folder-numbers)
- (cdr folder-numbers)
- is-local)))
-
-(luna-define-method elmo-folder-flag-as-read ((folder
- elmo-multi-folder)
- numbers
- &optional is-local)
- (dolist (folder-numbers (elmo-multi-make-folder-numbers-list folder numbers))
- (elmo-folder-flag-as-read (car folder-numbers)
- (cdr folder-numbers)
- is-local)))
-
-(luna-define-method elmo-folder-unflag-read ((folder
- elmo-multi-folder)
- numbers
- &optional is-local)
- (dolist (folder-numbers (elmo-multi-make-folder-numbers-list folder numbers))
- (elmo-folder-unflag-read (car folder-numbers)
- (cdr folder-numbers)
- is-local)))
-
-(luna-define-method elmo-folder-flag-as-answered ((folder
- elmo-multi-folder)
- numbers
- &optional is-local)
- (dolist (folder-numbers (elmo-multi-make-folder-numbers-list folder numbers))
- (elmo-folder-flag-as-answered (car folder-numbers)
- (cdr folder-numbers)
- is-local)))
-
-(luna-define-method elmo-folder-unflag-answered ((folder
- elmo-multi-folder)
- numbers
- &optional is-local)
- (dolist (folder-numbers (elmo-multi-make-folder-numbers-list folder numbers))
- (elmo-folder-unflag-answered (car folder-numbers)
- (cdr folder-numbers)
- is-local)))
+(luna-define-method elmo-folder-set-flag ((folder elmo-multi-folder)
+ numbers
+ flag
+ &optional is-local)
+ (dolist (pair (elmo-multi-make-folder-numbers-list folder numbers))
+ (elmo-folder-set-flag (car pair) (cdr pair) flag is-local)))
+
+(luna-define-method elmo-folder-unset-flag ((folder elmo-multi-folder)
+ numbers
+ flag
+ &optional is-local)
+ (dolist (pair (elmo-multi-make-folder-numbers-list folder numbers))
+ (elmo-folder-unset-flag (car pair) (cdr pair) flag is-local)))
(luna-define-method elmo-folder-list-flagged ((folder elmo-multi-folder)
flag
(elmo-dop-spool-folder-list-messages folder))))
t))
-(luna-define-method elmo-folder-list-unreads :around ((folder
- elmo-net-folder))
+(luna-define-method elmo-folder-list-flagged-internal ((folder elmo-net-folder)
+ flag)
(if (and (elmo-folder-plugged-p folder)
(elmo-folder-use-flag-p folder))
- (elmo-folder-send folder 'elmo-folder-list-unreads-plugged)
- (luna-call-next-method)))
-
-(luna-define-method elmo-folder-list-importants :around ((folder
- elmo-net-folder))
- (if (and (elmo-folder-plugged-p folder)
- (elmo-folder-use-flag-p folder))
- (elmo-folder-send folder 'elmo-folder-list-importants-plugged)
- (luna-call-next-method)))
-
-(luna-define-method elmo-folder-list-answereds :around ((folder
- elmo-net-folder))
- (if (and (elmo-folder-plugged-p folder)
- (elmo-folder-use-flag-p folder))
- (elmo-folder-send folder 'elmo-folder-list-answereds-plugged)
- (luna-call-next-method)))
-
-(luna-define-method elmo-folder-list-unreads-plugged
- ((folder elmo-net-folder))
- t)
-
-(luna-define-method elmo-folder-list-importants-plugged
- ((folder elmo-net-folder))
- t)
+ (elmo-folder-send folder 'elmo-folder-list-flagged-plugged flag)
+ ;; Should consider offline append and removal?
+ t))
-(luna-define-method elmo-folder-list-answereds-plugged
- ((folder elmo-net-folder))
+(luna-define-method elmo-folder-list-flagged-plugged ((folder elmo-net-folder)
+ flag)
t)
(luna-define-method elmo-folder-delete-messages ((folder elmo-net-folder)
(mapcar 'abs numbers)
flag-table)))
-(luna-define-method elmo-folder-unflag-important :before ((folder
- elmo-net-folder)
- numbers
- &optional
- is-local)
- (when (and (elmo-folder-use-flag-p folder)
- (not is-local))
- (if (elmo-folder-plugged-p folder)
- (elmo-folder-send folder 'elmo-folder-unflag-important-plugged
- numbers)
- (elmo-folder-send folder
- 'elmo-folder-unflag-important-unplugged numbers))))
-
-(luna-define-method elmo-folder-flag-as-important :before ((folder
- elmo-net-folder)
- numbers
- &optional
- is-local)
- (when (and (elmo-folder-use-flag-p folder)
- (not is-local))
- (if (elmo-folder-plugged-p folder)
- (elmo-folder-send folder 'elmo-folder-flag-as-important-plugged
- numbers)
- (elmo-folder-send folder 'elmo-folder-flag-as-important-unplugged
- numbers))))
-
-(luna-define-method elmo-folder-unflag-read :before ((folder elmo-net-folder)
- numbers
- &optional is-local)
- (when (and (elmo-folder-use-flag-p folder)
- (not is-local))
- (if (elmo-folder-plugged-p folder)
- (elmo-folder-send folder 'elmo-folder-unflag-read-plugged numbers)
- (elmo-folder-send folder 'elmo-folder-unflag-read-unplugged numbers))))
-
-(luna-define-method elmo-folder-flag-as-read :before ((folder elmo-net-folder)
- numbers
- &optional is-local)
- (when (and (elmo-folder-use-flag-p folder)
- (not is-local))
- (if (elmo-folder-plugged-p folder)
- (elmo-folder-send folder 'elmo-folder-flag-as-read-plugged numbers)
- (elmo-folder-send
- folder 'elmo-folder-flag-as-read-unplugged numbers))))
-
-(luna-define-method elmo-folder-unflag-answered :before ((folder
- elmo-net-folder)
- numbers
- &optional is-local)
- (when (and (elmo-folder-use-flag-p folder)
- (not is-local))
- (if (elmo-folder-plugged-p folder)
- (elmo-folder-send folder 'elmo-folder-unflag-answered-plugged
- numbers)
- (elmo-folder-send folder
- 'elmo-folder-unflag-answered-unplugged numbers))))
-
-(luna-define-method elmo-folder-flag-as-answered :before ((folder
- elmo-net-folder)
- numbers
- &optional is-local)
- (when (and (elmo-folder-use-flag-p folder)
- (not is-local))
- (if (elmo-folder-plugged-p folder)
- (elmo-folder-send folder 'elmo-folder-flag-as-answered-plugged
- numbers)
- (elmo-folder-send folder 'elmo-folder-flag-as-answered-unplugged
- numbers))))
-
-(luna-define-method elmo-folder-flag-as-read-unplugged ((folder
- elmo-net-folder)
- numbers)
- (elmo-folder-flag-as-read-dop folder numbers))
-
-(luna-define-method elmo-folder-unflag-read-unplugged ((folder elmo-net-folder)
- numbers)
- (elmo-folder-unflag-read-dop folder numbers))
-
-(luna-define-method elmo-folder-flag-as-important-unplugged ((folder
- elmo-net-folder)
- numbers)
- (elmo-folder-flag-as-important-dop folder numbers))
-
-(luna-define-method elmo-folder-unflag-important-unplugged ((folder
- elmo-net-folder)
- numbers)
- (elmo-folder-unflag-important-dop folder numbers))
-
-(luna-define-method elmo-folder-flag-as-answered-unplugged ((folder
- elmo-net-folder)
- numbers)
- (elmo-folder-flag-as-answered-dop folder numbers))
-
-(luna-define-method elmo-folder-unflag-answered-unplugged
- ((folder elmo-net-folder) numbers)
- (elmo-folder-unflag-answered-dop folder numbers))
+(luna-define-method elmo-folder-set-flag :before ((folder elmo-net-folder)
+ numbers
+ flag
+ &optional is-local)
+ (when (and (not is-local)
+ (elmo-folder-use-flag-p folder))
+ (elmo-folder-send folder
+ (if (elmo-folder-plugged-p folder)
+ 'elmo-folder-set-flag-plugged
+ 'elmo-folder-set-flag-unplugged)
+ numbers
+ flag)))
+
+(luna-define-method elmo-folder-unset-flag :before ((folder elmo-net-folder)
+ numbers
+ flag
+ &optional is-local)
+ (when (and (not is-local)
+ (elmo-folder-use-flag-p folder))
+ (elmo-folder-send folder
+ (if (elmo-folder-plugged-p folder)
+ 'elmo-folder-unset-flag-plugged
+ 'elmo-folder-unset-flag-unplugged)
+ numbers
+ flag)))
+
+(luna-define-method elmo-folder-set-flag-unplugged ((folder elmo-net-folder)
+ numbers flag)
+ (elmo-folder-set-flag-dop folder numbers flag))
+
+(luna-define-method elmo-folder-unset-flag-unplugged ((folder elmo-net-folder)
+ numbers flag)
+ (elmo-folder-unset-flag-dop folder numbers flag))
(luna-define-method elmo-message-encache :around ((folder elmo-net-folder)
number &optional read)
folder
(delq elem (elmo-nntp-folder-temp-crosses-internal folder)))))))
-(luna-define-method elmo-folder-flag-as-read :before ((folder
- elmo-nntp-folder)
- numbers
- &optional is-local)
- (elmo-nntp-folder-update-crosspost-message-alist folder numbers))
+(luna-define-method elmo-folder-set-flag :before ((folder elmo-nntp-folder)
+ numbers
+ flag
+ &optional is-local)
+ (when (eq flag 'read)
+ (elmo-nntp-folder-update-crosspost-message-alist folder numbers)))
+
+(luna-define-method elmo-folder-unset-flag :before ((folder elmo-nntp-folder)
+ numbers
+ flag
+ &optional is-local)
+ (when (eq flag 'unread)
+ (elmo-nntp-folder-update-crosspost-message-alist folder numbers)))
(defsubst elmo-nntp-folder-process-crosspost (folder)
;; 2.1. At elmo-folder-process-crosspost, setup `reads' slot from
(luna-define-method elmo-folder-process-crosspost ((folder elmo-nntp-folder))
(elmo-nntp-folder-process-crosspost folder))
-(luna-define-method elmo-folder-list-unreads :around ((folder
- elmo-nntp-folder))
+(luna-define-method elmo-folder-list-flagged :around ((folder elmo-nntp-folder)
+ flag)
;; 2.3. elmo-folder-list-unreads return unread message list according to
;; `reads' slot.
- (elmo-living-messages (luna-call-next-method)
- (elmo-nntp-folder-reads-internal folder)))
+ (case flag
+ (unread
+ (elmo-living-messages (luna-call-next-method)
+ (elmo-nntp-folder-reads-internal folder)))
+ ;; Should consider read, digest and any flag?
+ (otherwise
+ (luna-call-next-method))))
(require 'product)
(product-provide (provide 'elmo-nntp) (require 'elmo-version))
(elmo-folder-list-messages (elmo-pipe-folder-dst-internal
folder) visible-only in-msgdb))
-(luna-define-method elmo-folder-list-unreads ((folder elmo-pipe-folder))
- (elmo-folder-list-unreads (elmo-pipe-folder-dst-internal folder)))
-
-(luna-define-method elmo-folder-list-importants ((folder elmo-pipe-folder))
- (elmo-folder-list-importants (elmo-pipe-folder-dst-internal folder)))
-
-(luna-define-method elmo-folder-list-answereds ((folder elmo-pipe-folder))
- (elmo-folder-list-answereds (elmo-pipe-folder-dst-internal folder)))
-
(luna-define-method elmo-folder-diff ((folder elmo-pipe-folder))
(elmo-folder-open-internal (elmo-pipe-folder-src-internal folder))
(elmo-folder-open-internal (elmo-pipe-folder-dst-internal folder))
(elmo-folder-message-make-temp-files
(elmo-pipe-folder-dst-internal folder) numbers start-number))
-(luna-define-method elmo-folder-flag-as-read ((folder elmo-pipe-folder)
- numbers &optional is-local)
- (elmo-folder-flag-as-read (elmo-pipe-folder-dst-internal folder)
- numbers is-local))
-
-(luna-define-method elmo-folder-unflag-read ((folder elmo-pipe-folder)
- numbers
- &optional is-local)
- (elmo-folder-unflag-read (elmo-pipe-folder-dst-internal folder)
- numbers is-local))
-
-(luna-define-method elmo-folder-unflag-important ((folder elmo-pipe-folder)
- numbers
- &optional is-local)
- (elmo-folder-unflag-important (elmo-pipe-folder-dst-internal folder)
- numbers is-local))
-
-(luna-define-method elmo-folder-flag-as-important ((folder elmo-pipe-folder)
- numbers
- &optional is-local)
- (elmo-folder-flag-as-important (elmo-pipe-folder-dst-internal folder)
- numbers is-local))
-
-(luna-define-method elmo-folder-unflag-answered ((folder elmo-pipe-folder)
- numbers
- &optional is-local)
- (elmo-folder-unflag-answered (elmo-pipe-folder-dst-internal folder)
- numbers is-local))
-
-(luna-define-method elmo-folder-flag-as-answered ((folder elmo-pipe-folder)
- numbers
- &optional is-local)
- (elmo-folder-flag-as-answered (elmo-pipe-folder-dst-internal folder)
- numbers is-local))
+(luna-define-method elmo-folder-set-flag ((folder elmo-pipe-folder)
+ numbers
+ flag
+ &optional is-local)
+ (elmo-folder-set-flag (elmo-pipe-folder-dst-internal folder)
+ numbers flag is-local))
+
+(luna-define-method elmo-folder-unset-flag ((folder elmo-pipe-folder)
+ numbers
+ flag
+ &optional is-local)
+ (elmo-folder-unset-flag (elmo-pipe-folder-dst-internal folder)
+ numbers flag is-local))
(luna-define-method elmo-folder-pack-numbers ((folder elmo-pipe-folder))
(elmo-folder-pack-numbers (elmo-pipe-folder-dst-internal folder)))
(autoload 'elmo-global-flag-detach "elmo-flag")
(autoload 'elmo-global-flag-detach-messages "elmo-flag")
(autoload 'elmo-global-flag-set "elmo-flag")
- (autoload 'elmo-global-mark-migrate "elmo-flag"))
+ (autoload 'elmo-global-mark-migrate "elmo-flag")
+ (autoload 'elmo-folder-list-global-flag-messages "elmo-flag"))
(defun elmo-define-folder (prefix backend)
"Define a folder.
#'delq)
list))))
-(luna-define-generic elmo-folder-list-unreads (folder)
- "Return a list of unread message numbers contained in FOLDER.")
-(luna-define-generic elmo-folder-list-importants (folder)
- "Return a list of important message numbers contained in FOLDER.")
-(luna-define-generic elmo-folder-list-answereds (folder)
- "Return a list of answered message numbers contained in FOLDER.")
+(luna-define-generic elmo-folder-list-messages-internal (folder &optional
+ visible-only)
+ ;; Return a list of message numbers contained in FOLDER.
+ ;; Return t if the message list is not available.
+ )
(luna-define-generic elmo-folder-list-flagged (folder flag &optional in-msgdb)
"List messages in the FOLDER with FLAG.
(luna-define-method elmo-folder-list-flagged ((folder elmo-folder) flag
&optional in-msgdb)
- ;; Currently, only in-msgdb is implemented.
- (elmo-msgdb-list-flagged (elmo-folder-msgdb folder) flag))
-
-(luna-define-method elmo-folder-list-unreads ((folder elmo-folder))
- (elmo-folder-list-flagged folder 'unread))
-
-(luna-define-method elmo-folder-list-importants ((folder elmo-folder))
- (elmo-folder-list-flagged folder 'important))
-
-(luna-define-method elmo-folder-list-answereds ((folder elmo-folder))
- (elmo-folder-list-flagged folder 'answered))
-
-(luna-define-generic elmo-folder-list-messages-internal (folder &optional
- visible-only)
- ;; Return a list of message numbers contained in FOLDER.
- ;; Return t if the message list is not available.
- )
+ (let ((msgs (if in-msgdb
+ t
+ (elmo-folder-list-flagged-internal folder flag))))
+ (unless (listp msgs)
+ (setq msgs (elmo-msgdb-list-flagged (elmo-folder-msgdb folder) flag)))
+ (if in-msgdb
+ msgs
+ (elmo-uniq-list
+ (nconc (elmo-folder-list-global-flag-messages folder flag) msgs)
+ #'delq))))
+
+(luna-define-generic elmo-folder-list-flagged-internal (folder flag)
+ "Return a list of message in the FOLDER with FLAG.
+Return t if the message list is not available.")
+
+(luna-define-method elmo-folder-list-flagged-internal ((folder elmo-folder)
+ flag)
+ t)
(luna-define-generic elmo-folder-list-subfolders (folder &optional one-level)
"Returns a list of subfolders contained in FOLDER.
NUMBERS is a list of message numbers to create msgdb.
FLAG-TABLE is a hashtable of message-id and flag.")
-(luna-define-generic elmo-folder-unflag-important (folder
- numbers
- &optional is-local)
- "Un-flag messages as important.
-FOLDER is the ELMO folder structure.
-NUMBERS is a list of message numbers to be processed.
-If IS-LOCAL is non-nil, only the local flag is updated.")
-
-(luna-define-generic elmo-folder-flag-as-important (folder
- numbers
- &optional is-local)
- "Flag messages as important.
-FOLDER is the ELMO folder structure.
-NUMBERS is a list of message numbers to be processed.
-If IS-LOCAL is non-nil, only the local flag is updated.")
-
-(luna-define-generic elmo-folder-unflag-read (folder numbers
- &optional is-local)
- "Un-flag messages as read.
-FOLDER is the ELMO folder structure.
-NUMBERS is a list of message numbers to be processed.
-If IS-LOCAL is non-nil, only the local flag is updated.")
+(luna-define-generic elmo-folder-set-flag (folder numbers flag
+ &optional is-local)
+ "Set messages flag.
+FOLDER is a ELMO folder structure.
+NUMBERS is a list of message number to set flag.
-(luna-define-generic elmo-folder-flag-as-read (folder numbers
- &optional is-local)
- "Flag messages as read.
-FOLDER is the ELMO folder structure.
-NUMBERS is a list of message numbers to be processed.
-If IS-LOCAL is non-nil, only the local flag is updated.")
+FLAG is a symbol which is one of the following:
+ `unread' (set the message as unread)
+ `answered' (set the message as answered)
+ `important' (set the message as important)
+'sugar' flag:
+ `read' (remove new and unread flags)
+If optional IS-LOCAL is non-nil, update only local (not server) status.")
-(luna-define-generic elmo-folder-unflag-answered (folder numbers
- &optional is-local)
- "Un-flag messages as answered.
-FOLDER is the ELMO folder structure.
-If IS-LOCAL is non-nil, only the local flag is updated.")
+(luna-define-generic elmo-folder-unset-flag (folder numbers flag
+ &optional is-local)
+ "Unset messages flag.
+FOLDER is a ELMO folder structure.
+NUMBERS is a list of message number to unset flag.
-(luna-define-generic elmo-folder-flag-as-answered (folder numbers
- &optional is-local)
- "Flag messages as answered.
-FOLDER is the ELMO folder structure.
-If IS-LOCAL is non-nil, only the local flag is updated.")
+FLAG is a symbol which is one of the following:
+ `unread' (remove unread and new flag)
+ `answered' (remove answered flag)
+ `important' (remove important flag)
+'sugar' flag:
+ `read' (set unread flag)
+If optional IS-LOCAL is non-nil, update only local (not server) status.")
(luna-define-generic elmo-folder-next-message-number (folder)
"The next message number that will be assigned to a new message.
`read' (remove new and unread flags)
If optional IS-LOCAL is non-nil, update only local (not server) status."
;; XXX Transitional implementation.
- (case flag
- (unread
- (elmo-folder-unflag-read folder (list number) is-local))
- (read
- (elmo-folder-flag-as-read folder (list number) is-local))
- (answered
- (elmo-folder-flag-as-answered folder (list number) is-local))
- (important
- (elmo-folder-flag-as-important folder (list number) is-local))))
+ (elmo-folder-set-flag folder (list number) flag is-local))
(defun elmo-message-unset-flag (folder number flag &optional is-local)
"Unset message flag.
`read' (set unread flag)
If optional IS-LOCAL is non-nil, update only local (not server) status."
;; XXX Transitional implementation.
- (case flag
- (unread
- (elmo-folder-flag-as-read folder (list number) is-local))
- (read
- (elmo-folder-unflag-read folder (list number) is-local))
- (answered
- (elmo-folder-unflag-answered folder (list number) is-local))
- (important
- (elmo-folder-unflag-important folder (list number) is-local))))
+ (elmo-folder-unset-flag folder (list number) flag is-local))
(luna-define-generic elmo-message-field (folder number field)
"Get message field value in the msgdb.
(luna-define-method elmo-message-folder ((folder elmo-folder) number)
folder) ; default is folder
-(luna-define-method elmo-folder-unflag-important ((folder elmo-folder)
- numbers
- &optional is-local)
- (when (elmo-folder-msgdb-internal folder)
- (dolist (number numbers)
- (when (elmo-global-flag-p 'important)
- (elmo-global-flag-detach 'important folder number 'always))
- (elmo-msgdb-unset-flag (elmo-folder-msgdb folder)
- number
- 'important))))
-
-(luna-define-method elmo-folder-flag-as-important ((folder elmo-folder)
- numbers
- &optional is-local)
- (let (path message-id)
- (when (elmo-folder-msgdb-internal folder)
- (dolist (number numbers)
- ;; important message should always be a read message.
- (if (eq (elmo-file-cache-exists-p
- (setq message-id
- (elmo-message-field folder number 'message-id)))
- 'entire)
- (elmo-folder-flag-as-read folder (list number)))
- (when (elmo-global-flag-p 'important)
- (elmo-global-flag-set 'important folder number message-id))
- (elmo-msgdb-set-flag (elmo-folder-msgdb folder)
- number
- 'important)))))
-
-(luna-define-method elmo-folder-unflag-read ((folder elmo-folder)
- numbers
- &optional is-local)
- (when (elmo-folder-msgdb-internal folder)
- (dolist (number numbers)
- (elmo-msgdb-unset-flag (elmo-folder-msgdb folder)
- number
- 'read))))
-
-(luna-define-method elmo-folder-flag-as-read ((folder elmo-folder)
- numbers
- &optional is-local)
+(luna-define-method elmo-folder-set-flag ((folder elmo-folder)
+ numbers
+ flag
+ &optional is-local)
(when (elmo-folder-msgdb-internal folder)
(dolist (number numbers)
+ (when (elmo-global-flag-p flag)
+ (let ((message-id (elmo-message-field folder number 'message-id)))
+ (elmo-global-flag-set flag folder number message-id)))
(elmo-msgdb-set-flag (elmo-folder-msgdb folder)
number
- 'read))))
+ flag))))
-(luna-define-method elmo-folder-unflag-answered ((folder elmo-folder)
- numbers
- &optional is-local)
+(luna-define-method elmo-folder-unset-flag ((folder elmo-folder)
+ numbers
+ flag
+ &optional is-local)
(when (elmo-folder-msgdb-internal folder)
(dolist (number numbers)
+ (when (elmo-global-flag-p flag)
+ (elmo-global-flag-detach flag folder number 'always))
(elmo-msgdb-unset-flag (elmo-folder-msgdb folder)
number
- 'answered))))
-
-(luna-define-method elmo-folder-flag-as-answered ((folder elmo-folder)
- numbers
- &optional is-local)
- (when (elmo-folder-msgdb-internal folder)
- (dolist (number numbers)
- (elmo-msgdb-set-flag (elmo-folder-msgdb folder)
- number
- 'answered))))
+ flag))))
(luna-define-method elmo-folder-process-crosspost ((folder elmo-folder))
;; Do nothing.
;; Let duplicates be a temporary killed message.
(elmo-folder-kill-messages folder duplicates)
;; Should be flag as read.
- (elmo-folder-flag-as-read folder duplicates))
+ (elmo-folder-set-flag folder duplicates 'read))
((eq (elmo-folder-process-duplicates-internal folder)
'read)
;; Flag as read duplicates.
- (elmo-folder-flag-as-read folder duplicates))
+ (elmo-folder-set-flag folder duplicates 'read))
(t
;; Do nothing.
(setq duplicates nil)))
2004-01-11 Hiroya Murata <lapis-lazuli@pop06.odn.ne.jp>
+ * wl-summary.el (wl-summary-mark-as-read-all): Follow the API
+ change.
+ (wl-summary-sync-marks): Ditto.
+ (wl-summary-mark-as-read-internal): Ditto.
+ (wl-summary-mark-as-answered-internal): Ditto.
+ (wl-summary-mark-as-important-internal): Ditto.
+ (wl-summary-reply): Ditto.
+
+ * wl-draft.el (wl-draft-kill): Use `elmo-folder-unset-flag'
+ instead of `elmo-folder-unflag-answered'.
+
* Version number is increased to 2.11.23.
* wl-spam.el (wl-summary-exec-action-refile-with-register): Fixed
(string= (wl-summary-buffer-folder-name)
folder-name)))
(with-current-buffer buffer
- (elmo-folder-unflag-answered folder (list number))
+ (elmo-folder-unset-flag folder (list number) 'answered)
(when (wl-summary-jump-to-msg number)
(wl-summary-update-persistent-mark)))
(elmo-folder-open folder 'load-msgdb)
- (elmo-folder-unflag-answered folder (list number))
+ (elmo-folder-unset-flag folder (list number) 'answered)
(elmo-folder-close folder))))
(wl-draft-hide cur-buf)
(wl-draft-delete cur-buf)))
(let ((folder wl-summary-buffer-elmo-folder)
(cur-buf (current-buffer)))
(message "Setting all msgs as read...")
- (elmo-folder-flag-as-read folder
- (elmo-folder-list-unreads
- folder))
+ (elmo-folder-set-flag
+ folder
+ (elmo-folder-list-flagged folder 'unread 'in-msgdb)
+ 'read)
(save-excursion
(goto-char (point-min))
(while (not (eobp))
(defun wl-summary-sync-marks ()
"Update persistent marks in summary."
(interactive)
- (let ((last-progress 0)
- (folder wl-summary-buffer-elmo-folder)
- (i 0)
- answereds importants unreads diff diffs
- mes progress)
+ (let (diff diffs mes)
;; synchronize marks.
(when (not (eq (elmo-folder-type-internal
wl-summary-buffer-elmo-folder)
'internal))
(message "Updating marks...")
- (setq importants (elmo-uniq-list
- (nconc (elmo-folder-list-importants
- wl-summary-buffer-elmo-folder)
- ;; XXX Temporal implementation.
- ;; It should be merged to the
- ;; elmo-folder-list-flagged.
- (elmo-folder-list-global-flag-messages
- wl-summary-buffer-elmo-folder
- 'important)))
- unreads (elmo-folder-list-unreads
- wl-summary-buffer-elmo-folder)
- answereds (elmo-folder-list-answereds
- wl-summary-buffer-elmo-folder))
- (setq diff (elmo-list-diff importants
+ (setq diff (elmo-list-diff (elmo-folder-list-flagged
+ wl-summary-buffer-elmo-folder
+ 'important)
(elmo-folder-list-flagged
wl-summary-buffer-elmo-folder
'important 'in-msgdb)))
(wl-summary-mark-as-important (car diffs) 'no-server)
(setq diffs (cdr diffs)))
- (setq diff (elmo-list-diff answereds
+ (setq diff (elmo-list-diff (elmo-folder-list-flagged
+ wl-summary-buffer-elmo-folder
+ 'answered)
(elmo-folder-list-flagged
wl-summary-buffer-elmo-folder
'answered 'in-msgdb)))
(wl-summary-mark-as-answered (car diffs) 'no-modeline)
(setq diffs (cdr diffs)))
- (setq diff (elmo-list-diff unreads
+ (setq diff (elmo-list-diff (elmo-folder-list-flagged
+ wl-summary-buffer-elmo-folder
+ 'unread)
(elmo-folder-list-flagged
wl-summary-buffer-elmo-folder
'unread 'in-msgdb)))
(if (null number-list)
(message "No message.")
(if inverse
- (elmo-folder-unflag-read folder number-list no-folder-mark)
- (elmo-folder-flag-as-read folder number-list no-folder-mark))
+ (elmo-folder-unset-flag folder number-list 'read no-folder-mark)
+ (elmo-folder-set-flag folder number-list 'read no-folder-mark))
(dolist (number number-list)
(setq visible (wl-summary-jump-to-msg number))
(unless inverse
(wl-summary-update-persistent-mark)))
(unless no-modeline-update
;; Update unread numbers.
- ;; should elmo-folder-flag-as-read return unread numbers?
(wl-summary-count-unread)
(wl-summary-update-modeline)
(wl-folder-update-unread
(if (null number-list)
(message "No message.")
(if inverse
- (elmo-folder-unflag-answered folder number-list)
- (elmo-folder-flag-as-answered folder number-list))
+ (elmo-folder-unset-flag folder number-list 'answered)
+ (elmo-folder-set-flag folder number-list 'answered))
(dolist (number number-list)
(setq visible (wl-summary-jump-to-msg number))
;; set mark on buffer
(if (null number-list)
(message "No message.")
(if inverse
- (elmo-folder-unflag-important folder number-list no-server-update)
- (elmo-folder-flag-as-important folder number-list no-server-update))
+ (elmo-folder-unset-flag folder number-list
+ 'important no-server-update)
+ (elmo-folder-set-flag folder number-list
+ 'important no-server-update))
(dolist (number number-list)
(setq visible (wl-summary-jump-to-msg number))
;; set mark on buffer
(error (set-window-configuration winconf)
(signal (car err)(cdr err))))
(with-current-buffer summary-buf
- (elmo-folder-flag-as-answered folder (list number))
+ (elmo-folder-set-flag folder (list number) 'answered)
(wl-summary-update-persistent-mark))
t)))