X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=elmo%2Felmo-nntp.el;h=74030a89db53bd6224aa2f78cac66929b74bbbe9;hb=d702b4b970138b3b2ba6269407c7f6f53aaed6f1;hp=d8a742ae44b082f93d243e1bed8b4ac575956651;hpb=a6a27f057b576bcec0f82aba2e3b980ab06a02ed;p=elisp%2Fwanderlust.git diff --git a/elmo/elmo-nntp.el b/elmo/elmo-nntp.el index d8a742a..74030a8 100644 --- a/elmo/elmo-nntp.el +++ b/elmo/elmo-nntp.el @@ -254,7 +254,8 @@ Don't cache if nil.") (luna-define-method elmo-network-initialize-session ((session elmo-nntp-session)) - (let ((process (elmo-network-session-process-internal session))) + (let ((process (elmo-network-session-process-internal session)) + response) (set-process-filter (elmo-network-session-process-internal session) 'elmo-nntp-process-filter) (with-current-buffer (elmo-network-session-buffer session) @@ -266,8 +267,9 @@ Don't cache if nil.") (not (looking-at "^[2-5][0-9][0-9]"))) (accept-process-output process 1)) (setq elmo-nntp-read-point (point)) - (or (elmo-nntp-read-response session t) - (error "Cannot open network")) + (setq response (elmo-nntp-read-response session t t)) + (unless (car response) + (signal 'elmo-open-error (list (cdr response)))) (if elmo-nntp-send-mode-reader (elmo-nntp-send-mode-reader session)) (when (eq (elmo-network-stream-type-symbol @@ -308,7 +310,7 @@ Don't cache if nil.") (defun elmo-nntp-send-mode-reader (session) (elmo-nntp-send-command session "mode reader") (if (null (elmo-nntp-read-response session t)) - (error "Mode reader failed"))) + (message "Mode reader failed"))) (defun elmo-nntp-send-command (session command &optional noerase) (with-current-buffer (elmo-network-session-buffer session) @@ -321,7 +323,7 @@ Don't cache if nil.") (process-send-string (elmo-network-session-process-internal session) "\r\n"))) -(defun elmo-nntp-read-response (session &optional not-command) +(defun elmo-nntp-read-response (session &optional not-command error-msg) (with-current-buffer (elmo-network-session-buffer session) (let ((process (elmo-network-session-process-internal session)) (case-fold-search nil) @@ -337,14 +339,14 @@ Don't cache if nil.") (setq response-string (buffer-substring elmo-nntp-read-point (- match-end 2))) (goto-char elmo-nntp-read-point) - (if (looking-at "[234][0-9]+ .*$") + (if (looking-at "[23][0-9]+ .*$") (progn (setq response-continue nil) (setq elmo-nntp-read-point match-end) (setq response (if response (concat response "\n" response-string) response-string))) - (if (looking-at "[^234][0-9]+ .*$") + (if (looking-at "[^23][0-9]+ .*$") (progn (setq response-continue nil) (setq elmo-nntp-read-point match-end) (setq response nil)) @@ -356,7 +358,9 @@ Don't cache if nil.") (concat response "\n" response-string) response-string))) (setq elmo-nntp-read-point match-end))) - response))) + (if error-msg + (cons response response-string) + response)))) (defun elmo-nntp-read-raw-response (session) (with-current-buffer (elmo-network-session-buffer session) @@ -405,7 +409,7 @@ Don't cache if nil.") (and response group)) response)))) -(defun elmo-nntp-list-folders-get-cache (folder buf) +(defun elmo-nntp-list-folders-get-cache (group server buf) (when (and elmo-nntp-list-folders-use-cache elmo-nntp-list-folders-cache (string-match (concat "^" @@ -413,18 +417,24 @@ Don't cache if nil.") (or (nth 1 elmo-nntp-list-folders-cache) ""))) - (or folder ""))) + (or group "")) + (string-match (concat "^" + (regexp-quote + (or + (nth 2 elmo-nntp-list-folders-cache) + ""))) + (or server ""))) (let* ((cache-time (car elmo-nntp-list-folders-cache))) (unless (elmo-time-expire cache-time elmo-nntp-list-folders-use-cache) (save-excursion (set-buffer buf) (erase-buffer) - (insert (nth 2 elmo-nntp-list-folders-cache)) + (insert (nth 3 elmo-nntp-list-folders-cache)) (goto-char (point-min)) - (or (string= folder "") - (and folder - (keep-lines (concat "^" (regexp-quote folder) "\\.")))) + (or (string= group "") + (and group + (keep-lines (concat "^" (regexp-quote group) "\\.")))) t ))))) @@ -446,6 +456,7 @@ Don't cache if nil.") (defun elmo-nntp-folder-list-subfolders (folder one-level) (let ((session (elmo-nntp-get-session folder)) + (case-fold-search nil) response ret-val top-ng append-serv use-list-active start) (with-temp-buffer (set-buffer-multibyte nil) @@ -457,6 +468,7 @@ Don't cache if nil.") (setq ret-val (list (elmo-nntp-folder-group-internal folder)))) (unless (setq response (elmo-nntp-list-folders-get-cache (elmo-nntp-folder-group-internal folder) + (elmo-net-folder-server-internal folder) (current-buffer))) (when (setq use-list-active (elmo-nntp-list-active-p session)) (elmo-nntp-send-command @@ -476,6 +488,7 @@ Don't cache if nil.") (setq elmo-nntp-list-folders-cache (list (current-time) (elmo-nntp-folder-group-internal folder) + (elmo-net-folder-server-internal folder) response))) (erase-buffer) (insert response)) @@ -488,7 +501,7 @@ Don't cache if nil.") (error "NNTP List folders failed")) (when elmo-nntp-list-folders-use-cache (setq elmo-nntp-list-folders-cache - (list (current-time) nil response))) + (list (current-time) nil nil response))) (erase-buffer) (setq start nil) (while (string-match (concat "^" @@ -1074,16 +1087,13 @@ Don't cache if nil.") (elmo-folder-set-killed-list-internal folder killed-list)) t) -(luna-define-method elmo-folder-exists-p ((folder elmo-nntp-folder)) +(luna-define-method elmo-folder-exists-p-plugged ((folder elmo-nntp-folder)) (let ((session (elmo-nntp-get-session folder))) - (if (elmo-folder-plugged-p folder) - (progn (elmo-nntp-send-command session (format "group %s" (elmo-nntp-folder-group-internal folder))) - (elmo-nntp-read-response session)) - t))) + (elmo-nntp-read-response session))) (defun elmo-nntp-retrieve-field (spec field from-msgs) "Retrieve FIELD values from FROM-MSGS. @@ -1153,6 +1163,9 @@ Returns a list of cons cells like (NUMBER . VALUE)" (if from-msgs (elmo-list-filter from-msgs result) result))) + ((string= "body" search-key) + (error +"Search by BODY is not supported (Toggle the plug off to search from caches)")) (t (let ((val (elmo-filter-value condition)) (negative (eq (elmo-filter-type condition) 'unmatch)) @@ -1452,9 +1465,6 @@ Returns a list of cons cells like (NUMBER . VALUE)" (luna-define-method elmo-message-use-cache-p ((folder elmo-nntp-folder) number) elmo-nntp-use-cache) -(luna-define-method elmo-folder-creatable-p ((folder elmo-nntp-folder)) - nil) - (defun elmo-nntp-parse-newsgroups (string &optional subscribe-only) (let ((nglist (elmo-parse string "[ \t\f\r\n,]*\\([^ \t\f\r\n,]+\\)")) ngs)