-;;; elmo-map.el -- A ELMO folder class with message number mapping.
+;;; elmo-map.el --- A ELMO folder class with message number mapping.
;; Copyright (C) 2000 Yuuichi Teranishi <teranisi@gohome.org>
;; should inherit this folder.
;;; Code:
-;;
+;;
(require 'elmo)
(require 'elmo-msgdb)
(luna-define-generic elmo-map-folder-mark-as-read (folder locations)
"")
+(luna-define-generic elmo-map-folder-unmark-answered (folder locations)
+ "")
+
+(luna-define-generic elmo-map-folder-mark-as-answered (folder locations)
+ "")
+
(luna-define-generic elmo-map-message-fetch (folder location
strategy
&optional
(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)
"")
(luna-define-method elmo-folder-status ((folder elmo-map-folder))
(elmo-folder-open-internal folder)
- (prog1
- (let ((numbers (mapcar
- 'car
- (elmo-map-folder-location-alist-internal folder))))
+ (elmo-folder-set-killed-list-internal
+ folder
+ (elmo-msgdb-killed-list-load (elmo-folder-msgdb-path folder)))
+ (let ((numbers (mapcar
+ 'car
+ (elmo-map-folder-location-alist-internal folder))))
+ (setq numbers (elmo-living-messages numbers (elmo-folder-killed-list-internal folder)))
+ (prog1
(cons (elmo-max-of-list numbers)
- (length numbers)))
- ;; Don't close after status.
- (unless (elmo-folder-reserve-status-p folder)
- (elmo-folder-close-internal folder))))
+ (length numbers))
+ ;; Don't close after status.
+ (unless (elmo-folder-reserve-status-p folder)
+ (elmo-folder-close-internal folder)))))
(defun elmo-map-message-number (folder location)
"Return number of the message in the FOLDER with LOCATION."
(elmo-map-folder-location-setup folder (nreverse location))
(elmo-folder-set-msgdb-internal
folder
- (list overview
- (nreverse number-alist)
- (nreverse mark-alist)
- (elmo-msgdb-make-overview-hashtb overview)))))
+ (elmo-make-msgdb overview
+ (nreverse number-alist)
+ (nreverse mark-alist)))))
(defun elmo-map-folder-location-setup (folder locations)
(elmo-map-folder-set-location-alist-internal
folder
(elmo-map-folder-list-message-locations folder)))
+(luna-define-method elmo-folder-clear :around ((folder elmo-map-folder)
+ &optional keep-killed)
+ (unless keep-killed
+ (elmo-map-folder-set-number-max-internal folder 0)
+ (elmo-map-folder-set-location-alist-internal folder nil)
+ ;; clear hashtable.
+ (elmo-map-folder-set-location-hash-internal folder (elmo-make-hash)))
+ (luna-call-next-method))
+
(luna-define-method elmo-folder-list-messages-internal
((folder elmo-map-folder) &optional nohide)
(mapcar 'car (elmo-map-folder-location-alist-internal folder)))
-(luna-define-method elmo-folder-unmark-important ((folder elmo-map-folder)
- numbers)
+(luna-define-method elmo-folder-unmark-important :before ((folder
+ elmo-map-folder)
+ numbers)
(elmo-map-folder-unmark-important
folder
(elmo-map-folder-numbers-to-locations folder numbers)))
-(luna-define-method elmo-folder-mark-as-important ((folder elmo-map-folder)
- numbers)
+(luna-define-method elmo-folder-mark-as-important :before ((folder
+ elmo-map-folder)
+ numbers)
(elmo-map-folder-mark-as-important
folder
(elmo-map-folder-numbers-to-locations folder numbers)))
-(luna-define-method elmo-folder-unmark-read ((folder elmo-map-folder)
- numbers)
- (elmo-map-folder-unmark-read
+(luna-define-method elmo-folder-unmark-read :before ((folder elmo-map-folder)
+ numbers
+ &optional ignore-flags)
+ (unless ignore-flags
+ (elmo-map-folder-unmark-read
+ folder
+ (elmo-map-folder-numbers-to-locations folder numbers))))
+
+(luna-define-method elmo-folder-mark-as-read :before ((folder
+ elmo-map-folder)
+ numbers
+ &optional ignore-flags)
+ (unless ignore-flags
+ (elmo-map-folder-mark-as-read
+ folder
+ (elmo-map-folder-numbers-to-locations folder numbers))))
+
+(luna-define-method elmo-folder-unmark-answered :before ((folder
+ elmo-map-folder)
+ numbers)
+ (elmo-map-folder-unmark-answered
folder
(elmo-map-folder-numbers-to-locations folder numbers)))
-(luna-define-method elmo-folder-mark-as-read ((folder elmo-map-folder) numbers)
- (elmo-map-folder-mark-as-read
+(luna-define-method elmo-folder-mark-as-answered :before ((folder
+ elmo-map-folder)
+ numbers)
+ (elmo-map-folder-mark-as-answered
folder
(elmo-map-folder-numbers-to-locations folder numbers)))
(elmo-map-message-location folder number)
strategy section unread))
-(luna-define-method elmo-folder-list-unreads-internal
- ((folder elmo-map-folder) unread-marks &optional mark-alist)
- (elmo-map-folder-locations-to-numbers
- folder
- (elmo-map-folder-list-unreads folder)))
+(luna-define-method elmo-folder-list-unreads :around ((folder elmo-map-folder))
+ (let ((locations (elmo-map-folder-list-unreads folder)))
+ (if (listp locations)
+ (elmo-map-folder-locations-to-numbers folder locations)
+ (luna-call-next-method))))
-(luna-define-method elmo-folder-list-importants-internal
- ((folder elmo-map-folder) important-mark)
+(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)
- t)))
+ (luna-call-next-method))))
+
+(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-folder-delete-messages ((folder elmo-map-folder)
numbers)
folder))
(elmo-map-folder-location-alist-internal folder))))
t) ; success
-
(require 'product)
(product-provide (provide 'elmo-map) (require 'elmo-version))