* elmo2.el (elmo-prefetch-msg): Set `unread' argument of `elmo-read-msg' as
[elisp/wanderlust.git] / elmo / elmo-pop3.el
index 648978a..a4539fe 100644 (file)
             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)