(require 'elmo-msgdb)
(require 'elmo-net)
-(require 'sasl)
(eval-when-compile
- (require 'elmo-util)
- (defun-maybe md5 (a)))
+ (require 'elmo-util))
(eval-and-compile
- (autoload 'starttls-open-stream "starttls")
- (autoload 'starttls-negotiate "starttls"))
+ (autoload 'md5 "md5"))
(defvar elmo-pop3-use-uidl t
"*If non-nil, use UIDL.")
(defvar elmo-pop3-exists-exactly t)
-(eval-and-compile
- (luna-define-class elmo-pop3-session (elmo-network-session) ()))
+(luna-define-class elmo-pop3-session (elmo-network-session))
;; buffer-local
(defvar elmo-pop3-read-point nil)
(elmo-network-session-greeting-internal session))
;; good, APOP ready server
(progn
- (require 'md5)
(elmo-pop3-send-command
(elmo-network-session-process-internal session)
(format "apop %s %s"
t)
(signal 'elmo-authenticate-error
'(elmo-pop3-auth-apop))))
- (signal 'elmo-open-error '(elmo-pop-auth-apop))))
-
+ (signal 'elmo-open-error '(elmo-pop3-auth-apop))))
+
(luna-define-method elmo-network-initialize-session-buffer :after
((session elmo-pop3-session) buffer)
(with-current-buffer buffer
(defalias 'elmo-pop3-msgdb-create 'elmo-pop3-msgdb-create-as-numlist)
+(defun elmo-pop3-sort-overview-by-original-number (overview loc-alist)
+ (if loc-alist
+ (sort overview
+ (lambda (ent1 ent2)
+ (< (elmo-pop3-uidl-to-number
+ (cdr (assq (elmo-msgdb-overview-entity-get-number ent1)
+ loc-alist)))
+ (elmo-pop3-uidl-to-number
+ (cdr (assq (elmo-msgdb-overview-entity-get-number ent2)
+ loc-alist))))))
+ overview))
+
+(defun elmo-pop3-sort-msgdb-by-original-number (msgdb)
+ (message "Sorting...")
+ (let ((overview (elmo-msgdb-get-overview msgdb)))
+ (setq overview (elmo-pop3-sort-overview-by-original-number
+ overview
+ (elmo-msgdb-get-location msgdb)))
+ (message "Sorting...done")
+ (list overview (nth 1 msgdb)(nth 2 msgdb)(nth 3 msgdb)(nth 4 msgdb))))
+
(defun elmo-pop3-msgdb-create-as-numlist (spec numlist new-mark
already-mark seen-mark
important-mark seen-list
(setq loc-alist (if msgdb (elmo-msgdb-get-location msgdb)
(elmo-msgdb-location-load
(elmo-msgdb-expand-path spec)))))
- (elmo-pop3-msgdb-create-by-header process numlist
- new-mark already-mark
- seen-mark seen-list
- loc-alist))))
+ (with-current-buffer (process-buffer process)
+ (elmo-pop3-sort-msgdb-by-original-number
+ (elmo-pop3-msgdb-create-by-header process numlist
+ new-mark already-mark
+ seen-mark seen-list
+ loc-alist))))))
(defun elmo-pop3-uidl-to-number (uidl)
(string-to-number (elmo-get-hash-val uidl
(insert-buffer-substring (process-buffer process) start (- end 3))
(elmo-delete-cr-get-content-type)))))
-(defun elmo-pop3-read-msg (spec number outbuf &optional msgdb)
+(defun elmo-pop3-read-msg (spec number outbuf &optional msgdb unread)
(let* ((loc-alist (if elmo-pop3-use-uidl
(if msgdb
(elmo-msgdb-get-location msgdb)