projects
/
elisp
/
wanderlust.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
* elmo-nntp.el (elmo-nntp-search-primitive): Revert the last change.
[elisp/wanderlust.git]
/
elmo
/
elmo-nntp.el
diff --git
a/elmo/elmo-nntp.el
b/elmo/elmo-nntp.el
index
8cd3d60
..
74030a8
100644
(file)
--- a/
elmo/elmo-nntp.el
+++ b/
elmo/elmo-nntp.el
@@
-245,13
+245,17
@@
Don't cache if nil.")
(defun elmo-nntp-get-session (folder &optional if-exists)
(elmo-network-get-session
'elmo-nntp-session
(defun elmo-nntp-get-session (folder &optional if-exists)
(elmo-network-get-session
'elmo-nntp-session
- "NNTP"
+ (concat
+ (if (elmo-folder-biff-internal folder)
+ "BIFF-")
+ "NNTP")
folder
if-exists))
(luna-define-method elmo-network-initialize-session ((session
elmo-nntp-session))
folder
if-exists))
(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)
(set-process-filter (elmo-network-session-process-internal session)
'elmo-nntp-process-filter)
(with-current-buffer (elmo-network-session-buffer session)
@@
-260,11
+264,12
@@
Don't cache if nil.")
(while (and (memq (process-status process) '(open run))
(goto-char (point-max))
(forward-line -1)
(while (and (memq (process-status process) '(open run))
(goto-char (point-max))
(forward-line -1)
- (not (looking-at "20[01]")))
+ (not (looking-at "^[2-5][0-9][0-9]")))
(accept-process-output process 1))
(setq elmo-nntp-read-point (point))
(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
(if elmo-nntp-send-mode-reader
(elmo-nntp-send-mode-reader session))
(when (eq (elmo-network-stream-type-symbol
@@
-305,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))
(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)
(defun elmo-nntp-send-command (session command &optional noerase)
(with-current-buffer (elmo-network-session-buffer session)
@@
-318,7
+323,7
@@
Don't cache if nil.")
(process-send-string (elmo-network-session-process-internal
session) "\r\n")))
(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)
(with-current-buffer (elmo-network-session-buffer session)
(let ((process (elmo-network-session-process-internal session))
(case-fold-search nil)
@@
-353,7
+358,9
@@
Don't cache if nil.")
(concat response "\n" response-string)
response-string)))
(setq elmo-nntp-read-point match-end)))
(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)
(defun elmo-nntp-read-raw-response (session)
(with-current-buffer (elmo-network-session-buffer session)
@@
-386,7
+393,8
@@
Don't cache if nil.")
(with-current-buffer outbuf
(erase-buffer)
(insert-buffer-substring (elmo-network-session-buffer session)
(with-current-buffer outbuf
(erase-buffer)
(insert-buffer-substring (elmo-network-session-buffer session)
- start (- end 3))))))
+ start (- end 3))))
+ t))
(defun elmo-nntp-select-group (session group &optional force)
(let (response)
(defun elmo-nntp-select-group (session group &optional force)
(let (response)
@@
-401,7
+409,7
@@
Don't cache if nil.")
(and response group))
response))))
(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 "^"
(when (and elmo-nntp-list-folders-use-cache
elmo-nntp-list-folders-cache
(string-match (concat "^"
@@
-409,18
+417,24
@@
Don't cache if nil.")
(or
(nth 1 elmo-nntp-list-folders-cache)
"")))
(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)
(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))
(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
)))))
t
)))))
@@
-442,6
+456,7
@@
Don't cache if nil.")
(defun elmo-nntp-folder-list-subfolders (folder one-level)
(let ((session (elmo-nntp-get-session folder))
(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)
response ret-val top-ng append-serv use-list-active start)
(with-temp-buffer
(set-buffer-multibyte nil)
@@
-453,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)
(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
(current-buffer)))
(when (setq use-list-active (elmo-nntp-list-active-p session))
(elmo-nntp-send-command
@@
-472,6
+488,7
@@
Don't cache if nil.")
(setq elmo-nntp-list-folders-cache
(list (current-time)
(elmo-nntp-folder-group-internal folder)
(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))
response)))
(erase-buffer)
(insert response))
@@
-484,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
(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 "^"
(erase-buffer)
(setq start nil)
(while (string-match (concat "^"
@@
-586,9
+603,9
@@
Don't cache if nil.")
(goto-char (point-min))
(read (current-buffer)))))
(goto-char (point-min))
(read (current-buffer)))))
-(luna-define-method elmo-folder-list-messages-internal ((folder
- elmo-nntp-folder)
- &optional nohide)
+(luna-define-method elmo-folder-list-messages-plugged ((folder
+ elmo-nntp-folder)
+ &optional nohide)
(let ((session (elmo-nntp-get-session folder))
(group (elmo-nntp-folder-group-internal folder))
response numbers use-listgroup)
(let ((session (elmo-nntp-get-session folder))
(group (elmo-nntp-folder-group-internal folder))
response numbers use-listgroup)
@@
-960,12
+977,14
@@
Don't cache if nil.")
(with-current-buffer (elmo-network-session-buffer session)
(std11-field-body "Newsgroups")))))
(with-current-buffer (elmo-network-session-buffer session)
(std11-field-body "Newsgroups")))))
-(luna-define-method elmo-message-fetch-with-cache-process :after
+(luna-define-method elmo-message-fetch-with-cache-process :around
((folder elmo-nntp-folder) number strategy &optional section unread)
((folder elmo-nntp-folder) number strategy &optional section unread)
- (elmo-nntp-setup-crosspost-buffer folder number)
- (unless unread
- (elmo-nntp-folder-update-crosspost-message-alist
- folder (list number))))
+ (when (luna-call-next-method)
+ (elmo-nntp-setup-crosspost-buffer folder number)
+ (unless unread
+ (elmo-nntp-folder-update-crosspost-message-alist
+ folder (list number)))
+ t))
(luna-define-method elmo-message-fetch-plugged ((folder elmo-nntp-folder)
number strategy
(luna-define-method elmo-message-fetch-plugged ((folder elmo-nntp-folder)
number strategy
@@
-1068,16
+1087,13
@@
Don't cache if nil.")
(elmo-folder-set-killed-list-internal folder killed-list))
t)
(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)))
(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-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.
(defun elmo-nntp-retrieve-field (spec field from-msgs)
"Retrieve FIELD values from FROM-MSGS.
@@
-1121,32
+1137,35
@@
Returns a list of cons cells like (NUMBER . VALUE)"
numbers))
((or (string= "since" search-key)
(string= "before" search-key))
numbers))
((or (string= "since" search-key)
(string= "before" search-key))
- (let* ((key-date (elmo-date-get-datevec (elmo-filter-value condition)))
- (key-datestr (elmo-date-make-sortable-string key-date))
+ (let* ((specified-date (elmo-date-make-sortable-string
+ (elmo-date-get-datevec (elmo-filter-value
+ condition))))
(since (string= "since" search-key))
(since (string= "since" search-key))
- result)
+ field-date result)
(if (eq (elmo-filter-type condition) 'unmatch)
(setq since (not since)))
(setq result
(delq nil
(mapcar
(lambda (pair)
(if (eq (elmo-filter-type condition) 'unmatch)
(setq since (not since)))
(setq result
(delq nil
(mapcar
(lambda (pair)
+ (setq field-date
+ (elmo-date-make-sortable-string
+ (timezone-fix-time
+ (cdr pair)
+ (current-time-zone) nil)))
(if (if since
(if (if since
- (string< key-datestr
- (elmo-date-make-sortable-string
- (timezone-fix-time
- (cdr pair)
- (current-time-zone) nil)))
- (not (string< key-datestr
- (elmo-date-make-sortable-string
- (timezone-fix-time
- (cdr pair)
- (current-time-zone) nil)))))
+ (or (string= specified-date field-date)
+ (string< specified-date field-date))
+ (string< field-date
+ specified-date))
(car pair)))
(elmo-nntp-retrieve-field spec "date" from-msgs))))
(if from-msgs
(elmo-list-filter from-msgs result)
result)))
(car pair)))
(elmo-nntp-retrieve-field spec "date" from-msgs))))
(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))
(t
(let ((val (elmo-filter-value condition))
(negative (eq (elmo-filter-type condition) 'unmatch))
@@
-1168,27
+1187,37
@@
Returns a list of cons cells like (NUMBER . VALUE)"
(elmo-list-filter from-msgs result)
result))))))
(elmo-list-filter from-msgs result)
result))))))
-(luna-define-method elmo-folder-search ((folder elmo-nntp-folder)
- condition &optional from-msgs)
+(defun elmo-nntp-search-internal (folder condition from-msgs)
(let (result)
(cond
((vectorp condition)
(setq result (elmo-nntp-search-primitive
folder condition from-msgs)))
((eq (car condition) 'and)
(let (result)
(cond
((vectorp condition)
(setq result (elmo-nntp-search-primitive
folder condition from-msgs)))
((eq (car condition) 'and)
- (setq result (elmo-folder-search folder (nth 1 condition) from-msgs)
+ (setq result (elmo-nntp-search-internal folder
+ (nth 1 condition)
+ from-msgs)
result (elmo-list-filter result
result (elmo-list-filter result
- (elmo-folder-search
+ (elmo-nntp-search-internal
folder (nth 2 condition)
from-msgs))))
((eq (car condition) 'or)
folder (nth 2 condition)
from-msgs))))
((eq (car condition) 'or)
- (setq result (elmo-folder-search folder (nth 1 condition) from-msgs)
+ (setq result (elmo-nntp-search-internal folder
+ (nth 1 condition)
+ from-msgs)
result (elmo-uniq-list
(nconc result
result (elmo-uniq-list
(nconc result
- (elmo-folder-search folder (nth 2 condition)
- from-msgs)))
+ (elmo-nntp-search-internal folder
+ (nth 2 condition)
+ from-msgs)))
result (sort result '<))))))
result (sort result '<))))))
+(luna-define-method elmo-folder-search :around ((folder elmo-nntp-folder)
+ condition &optional from-msgs)
+ (if (elmo-folder-plugged-p folder)
+ (elmo-nntp-search-internal folder condition from-msgs)
+ (luna-call-next-method)))
+
(defun elmo-nntp-get-folders-info-prepare (folder session-keys)
(condition-case ()
(let ((session (elmo-nntp-get-session folder))
(defun elmo-nntp-get-folders-info-prepare (folder session-keys)
(condition-case ()
(let ((session (elmo-nntp-get-session folder))
@@
-1436,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-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)
(defun elmo-nntp-parse-newsgroups (string &optional subscribe-only)
(let ((nglist (elmo-parse string "[ \t\f\r\n,]*\\([^ \t\f\r\n,]+\\)"))
ngs)