-;;; elmo-net.el -- Network module for ELMO.
+;;; elmo-net.el --- Network module for ELMO.
;; Copyright (C) 1998,1999,2000 Yuuichi Teranishi <teranisi@gohome.org>
;;
;;; 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)
:process nil
:greeting nil))
(buffer (format " *%s session for %s@%s:%d%s"
- (concat elmo-network-session-name-prefix name)
+ name
user
server
port
(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)
(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
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)))
(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)
(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
;; 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)
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
(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)
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))
(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))
(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