* wl-vars.el: Changed file coding system to ISO-2022-JP.
[elisp/wanderlust.git] / elmo / elmo-nntp.el
index 554f0aa..c4ed392 100644 (file)
 
 (require 'elmo-msgdb)
 (eval-when-compile
-  (condition-case nil
-      (progn
-       (require 'starttls))
-    (error))
   (require 'elmo-cache)
-  (require 'elmo-util)
-  (defun-maybe starttls-negotiate (a)))
+  (require 'elmo-util))
 (require 'elmo-net)
 
 (eval-and-compile
@@ -184,21 +179,27 @@ Don't cache if nil.")
 
 (luna-define-method elmo-network-initialize-session ((session
                                                      elmo-nntp-session))
-  (set-process-filter (elmo-network-session-process-internal session)
-                     'elmo-nntp-process-filter)
-  (with-current-buffer (elmo-network-session-buffer session)
-    (setq elmo-nntp-read-point (point-min))
-    (or (elmo-nntp-read-response session t)
-       (error "Cannot open network"))
-    (when (eq (elmo-network-stream-type-symbol
-              (elmo-network-session-stream-type-internal session))
-             'starttls)
-      (elmo-nntp-send-command session "starttls")
-      (or (elmo-nntp-read-response session)
-         (error "Cannot open starttls session"))
-      (starttls-negotiate
-       (elmo-network-session-process-internal session)))))
-
+  (let ((process (elmo-network-session-process-internal session)))
+    (set-process-filter (elmo-network-session-process-internal session)
+                       'elmo-nntp-process-filter)
+    (with-current-buffer (elmo-network-session-buffer session)
+      (setq elmo-nntp-read-point (point-min))
+      ;; Skip garbage output from process before greeting.
+      (while (and (memq (process-status process) '(open run))
+                  (goto-char (point-max))
+                  (forward-line -1)
+                  (not (looking-at "20[01]")))
+        (accept-process-output process 1))
+      (setq elmo-nntp-read-point (point))
+      (or (elmo-nntp-read-response session t)
+         (error "Cannot open network"))
+      (when (eq (elmo-network-stream-type-symbol
+                (elmo-network-session-stream-type-internal session))
+               'starttls)
+       (elmo-nntp-send-command session "starttls")
+       (or (elmo-nntp-read-response session)
+           (error "Cannot open starttls session"))
+       (starttls-negotiate process)))))
 
 (luna-define-method elmo-network-authenticate-session ((session
                                                        elmo-nntp-session))
@@ -495,7 +496,7 @@ Don't cache if nil.")
      (goto-char (point-min))
      (read (current-buffer)))))
 
-(defun elmo-nntp-list-folder (spec)
+(defun elmo-nntp-list-folder (spec &optional nohide)
   (let ((session (elmo-nntp-get-session spec))
        (group   (elmo-nntp-spec-group spec))
        (killed (and elmo-use-killed-list
@@ -859,7 +860,7 @@ Don't cache if nil.")
       (with-current-buffer (elmo-network-session-buffer session)
        (std11-field-body "Newsgroups")))))
 
-(defun elmo-nntp-read-msg (spec number outbuf)
+(defun elmo-nntp-read-msg (spec number outbuf &optional msgdb unread)
   (let ((session (elmo-nntp-get-session spec)))
     (with-current-buffer (elmo-network-session-buffer session)
       (elmo-nntp-select-group session (elmo-nntp-spec-group spec))
@@ -1135,7 +1136,10 @@ Returns a list of cons cells like (NUMBER . VALUE)"
            (if (not (string= postfix ""))
                (save-excursion
                  (replace-regexp "^\\(211 [0-9]+ [0-9]+ [0-9]+ [^ \n]+\\).*$"
-                                 (concat "\\1" postfix)))))
+                                 (concat "\\1"
+                                         (elmo-replace-in-string
+                                          postfix
+                                          "\\\\" "\\\\\\\\\\\\\\\\"))))))
          (let (len min max group)
            (while (not (eobp))
              (condition-case ()