Revert last commit (I'm sorry it was my mistake).
[elisp/wanderlust.git] / elmo / elmo-net.el
index 3bb72c2..009dcae 100644 (file)
@@ -1,4 +1,4 @@
-;;; elmo-net.el -- Network module for ELMO.
+;;; elmo-net.el --- Network module for ELMO.
 
 ;; Copyright (C) 1998,1999,2000 Yuuichi Teranishi <teranisi@gohome.org>
 
@@ -24,7 +24,7 @@
 ;;
 
 ;;; Commentary:
-;; 
+;;
 
 (eval-when-compile (require 'cl))
 
 
 (defsubst elmo-network-session-password-key (session)
   (format "%s:%s/%s@%s:%d"
-         (elmo-network-session-name-internal session)
+         (upcase
+          (nth 1 (split-string (symbol-name
+                                (luna-class-name session)) "[4-]")))
          (elmo-network-session-user-internal session)
          (elmo-network-session-auth-internal session)
          (elmo-network-session-server-internal session)
          (elmo-network-session-port-internal session)))
 
 (defvar elmo-network-session-cache nil)
-(defvar elmo-network-session-name-prefix nil)
 
 (defsubst elmo-network-session-cache-key (name folder)
   "Returns session cache key for NAME and FOLDER."
   (format "%s:%s/%s@%s:%d%s"
-         (concat elmo-network-session-name-prefix name)
+         name
          (elmo-net-folder-user-internal folder)
          (elmo-net-folder-auth-internal folder)
          (elmo-net-folder-server-internal folder)
@@ -212,7 +213,7 @@ Returns a process object.  if making session failed, returns nil."
                           :process nil
                           :greeting nil))
        (buffer (format " *%s session for %s@%s:%d%s"
-                       (concat elmo-network-session-name-prefix name)
+                       name
                        user
                        server
                        port
@@ -234,6 +235,12 @@ Returns a process object.  if making session failed, returns nil."
            (elmo-network-authenticate-session session)
            (elmo-network-setup-session session)))
       (error
+       (when (eq (car error) 'elmo-open-error)
+        (elmo-set-plugged nil server port
+                          (elmo-network-stream-type-symbol stream-type)
+                          (current-time))
+        (message "Auto plugged off at %s:%d :%s" server port (cadr error))
+        (sit-for 1))
        (when (eq (car error) 'elmo-authenticate-error)
         (elmo-remove-passwd (elmo-network-session-password-key session)))
        (elmo-network-close-session session)
@@ -248,7 +255,7 @@ Returns a process object.  if making session failed, returns nil."
             (elmo-network-stream-type-feature stream-type))
        (require (elmo-network-stream-type-feature stream-type)))
     (condition-case err
-       (let (process-connection-type)
+       (let (process-connection-type)
          (as-binary-process
           (setq process
                 (if stream-type
@@ -296,7 +303,7 @@ Returned value is searched from `elmo-network-stream-type-alist'."
         folder
         (string-to-int (elmo-match-substring 2 name 1))))
     (if (match-beginning 3)
-       (elmo-net-folder-set-stream-type-internal 
+       (elmo-net-folder-set-stream-type-internal
         folder
         (assoc (elmo-match-string 3 name)
                elmo-network-stream-type-alist)))
@@ -321,17 +328,28 @@ Returned value is searched from `elmo-network-stream-type-alist'."
   (apply 'elmo-plugged-p
         (append (elmo-net-port-info folder)
                 (list nil (quote (elmo-net-port-label folder))))))
-                           
+
 (luna-define-method elmo-folder-set-plugged ((folder elmo-net-folder)
                                             plugged &optional add)
   (apply 'elmo-set-plugged plugged
         (append (elmo-net-port-info folder)
                 (list nil nil (quote (elmo-net-port-label folder)) add))))
 
+(luna-define-method elmo-folder-create ((folder elmo-net-folder))
+  (if (elmo-folder-plugged-p folder)
+      (elmo-folder-send folder 'elmo-folder-create-plugged)
+    (elmo-folder-send folder 'elmo-folder-create-unplugged)))
+
+(luna-define-method elmo-folder-create-unplugged ((folder elmo-net-folder))
+  (if elmo-enable-disconnected-operation
+      (elmo-folder-create-dop folder)
+    (error "Unplugged")))
+
 (luna-define-method elmo-folder-exists-p ((folder elmo-net-folder))
   (if (elmo-folder-plugged-p folder)
       (elmo-folder-send folder 'elmo-folder-exists-p-plugged)
-    t)) ; If unplugged, assume the folder exists.
+    ;; If unplugged, guess by msgdb.
+    (file-directory-p (elmo-folder-msgdb-path folder))))
 
 (luna-define-method elmo-folder-status ((folder elmo-net-folder))
   (if (elmo-folder-plugged-p folder)
@@ -355,7 +373,7 @@ Returned value is searched from `elmo-network-stream-type-alist'."
 
 (luna-define-method elmo-folder-list-messages-plugged
   ((folder elmo-net-folder))
-  t)
+  nil)
 
 ;; Should consider offline append and removal.
 (luna-define-method elmo-folder-list-messages-unplugged ((folder
@@ -373,7 +391,7 @@ Returned value is searched from `elmo-network-stream-type-alist'."
         ;; append appending messages
         (mapcar (lambda (x) (* -1 x))
                 (elmo-dop-spool-folder-list-messages folder))))
-    (error "Unplugged")))
+    t))
 
 (luna-define-method elmo-folder-list-unreads-internal
   ((folder elmo-net-folder) unread-marks &optional mark-alist)
@@ -423,12 +441,12 @@ Returned value is searched from `elmo-network-stream-type-alist'."
                      new-mark already-mark seen-mark
                      important-mark seen-list)))
 
-(luna-define-method elmo-folder-msgdb-create-unplugged ((folder 
+(luna-define-method elmo-folder-msgdb-create-unplugged ((folder
                                                         elmo-net-folder)
                                                        numbers
                                                        new-mark already-mark
                                                        seen-mark
-                                                       important-mark 
+                                                       important-mark
                                                        seen-list)
   ;; XXXX should be appended to already existing msgdb.
   (elmo-dop-msgdb
@@ -436,7 +454,7 @@ Returned value is searched from `elmo-network-stream-type-alist'."
                             (mapcar 'abs numbers)
                             new-mark already-mark
                             seen-mark
-                            important-mark 
+                            important-mark
                             seen-list)))
 
 (luna-define-method elmo-folder-unmark-important ((folder elmo-net-folder)
@@ -477,7 +495,7 @@ Returned value is searched from `elmo-network-stream-type-alist'."
     t))
 
 (luna-define-method elmo-folder-mark-as-read-unplugged ((folder
-                                                        elmo-net-folder) 
+                                                        elmo-net-folder)
                                                        numbers)
   (elmo-folder-mark-as-read-dop folder numbers))
 
@@ -486,7 +504,7 @@ Returned value is searched from `elmo-network-stream-type-alist'."
   (elmo-folder-unmark-read-dop folder numbers))
 
 (luna-define-method elmo-folder-mark-as-important-unplugged ((folder
-                                                             elmo-net-folder) 
+                                                             elmo-net-folder)
                                                             numbers)
   (elmo-folder-mark-as-important-dop folder numbers))
 
@@ -496,11 +514,11 @@ Returned value is searched from `elmo-network-stream-type-alist'."
   (elmo-folder-unmark-important-dop folder numbers))
 
 (luna-define-method elmo-message-encache :around ((folder elmo-net-folder)
-                                                 number)
+                                                 number &optional read)
   (if (elmo-folder-plugged-p folder)
       (luna-call-next-method)
     (if elmo-enable-disconnected-operation
-       (elmo-message-encache-dop folder number)
+       (elmo-message-encache-dop folder number read)
       (error "Unplugged"))))
 
 (luna-define-generic elmo-message-fetch-plugged (folder number strategy