X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=elmo%2Felmo-nntp.el;h=9990caed01870bf1a28ba51b1594497b049a7066;hb=64eb91d7fe775e78e0f1e6555b595e40f391260a;hp=fde98361df33238edb1c5ca09d9917ef1e559d3d;hpb=0d7372de633bccf87e81e29225db2225866472d5;p=elisp%2Fwanderlust.git diff --git a/elmo/elmo-nntp.el b/elmo/elmo-nntp.el index fde9836..9990cae 100644 --- a/elmo/elmo-nntp.el +++ b/elmo/elmo-nntp.el @@ -310,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) @@ -409,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 "^" @@ -417,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 ))))) @@ -462,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 @@ -481,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)) @@ -493,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 "^" @@ -695,10 +703,6 @@ Don't cache if nil.") ("xref" . 8))) (defun elmo-nntp-create-msgdb-from-overview-string (str - new-mark - already-mark - seen-mark - important-mark seen-list &optional numlist) (let (ov-list gmark message-id seen @@ -760,11 +764,11 @@ Don't cache if nil.") (elmo-file-cache-get message-id)) (if seen nil - already-mark) + elmo-msgdb-unread-cached-mark) (if seen (if elmo-nntp-use-cache - seen-mark) - new-mark)))) + elmo-msgdb-read-uncached-mark) + elmo-msgdb-new-mark)))) (setq mark-alist (elmo-msgdb-mark-append mark-alist num gmark)))) @@ -772,16 +776,10 @@ Don't cache if nil.") (list overview number-alist mark-alist))) (luna-define-method elmo-folder-msgdb-create ((folder elmo-nntp-folder) - numbers new-mark already-mark - seen-mark important-mark - seen-list) - (elmo-nntp-folder-msgdb-create folder numbers new-mark already-mark - seen-mark important-mark - seen-list)) - -(defun elmo-nntp-folder-msgdb-create (folder numbers new-mark already-mark - seen-mark important-mark - seen-list) + numbers seen-list) + (elmo-nntp-folder-msgdb-create folder numbers seen-list)) + +(defun elmo-nntp-folder-msgdb-create (folder numbers seen-list) (let ((filter numbers) (session (elmo-nntp-get-session folder)) beg-num end-num cur length @@ -810,10 +808,6 @@ Don't cache if nil.") ret-val (elmo-nntp-create-msgdb-from-overview-string ov-str - new-mark - already-mark - seen-mark - important-mark seen-list filter ))))) @@ -835,8 +829,7 @@ Don't cache if nil.") 'elmo-nntp-msgdb-create "Getting overview..." 100))) (if (not use-xover) (setq ret-val (elmo-nntp-msgdb-create-by-header - session numbers - new-mark already-mark seen-mark seen-list)) + session numbers seen-list)) (with-current-buffer (elmo-network-session-buffer session) (if ov-str (setq ret-val @@ -844,10 +837,6 @@ Don't cache if nil.") ret-val (elmo-nntp-create-msgdb-from-overview-string ov-str - new-mark - already-mark - seen-mark - important-mark seen-list filter)))))) (elmo-folder-set-killed-list-internal @@ -908,13 +897,11 @@ Don't cache if nil.") (nconc number-alist (list (cons max-number nil)))))))))) -(defun elmo-nntp-msgdb-create-by-header (session numbers - new-mark already-mark - seen-mark seen-list) +(defun elmo-nntp-msgdb-create-by-header (session numbers seen-list) (with-temp-buffer (elmo-nntp-retrieve-headers session (current-buffer) numbers) (elmo-nntp-msgdb-create-message - (length numbers) new-mark already-mark seen-mark seen-list))) + (length numbers) seen-list))) (defun elmo-nntp-parse-xhdr-response (string) (let (response) @@ -1079,16 +1066,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. @@ -1393,8 +1377,7 @@ Returns a list of cons cells like (NUMBER . VALUE)" ;; end of from Gnus -(defun elmo-nntp-msgdb-create-message (len new-mark - already-mark seen-mark seen-list) +(defun elmo-nntp-msgdb-create-message (len seen-list) (save-excursion (let (beg overview number-alist mark-alist entity i num gmark seen message-id) @@ -1433,11 +1416,11 @@ Returns a list of cons cells like (NUMBER . VALUE)" (elmo-file-cache-get message-id)) (if seen nil - already-mark) + elmo-msgdb-unread-cached-mark) (if seen (if elmo-nntp-use-cache - seen-mark) - new-mark)))) + elmo-msgdb-read-uncached-mark) + elmo-msgdb-new-mark)))) (setq mark-alist (elmo-msgdb-mark-append mark-alist @@ -1457,9 +1440,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) @@ -1536,10 +1516,11 @@ Returns a list of cons cells like (NUMBER . VALUE)" folder (delq elem (elmo-nntp-folder-temp-crosses-internal folder))))))) -(luna-define-method elmo-folder-mark-as-read ((folder elmo-nntp-folder) - numbers) - (elmo-nntp-folder-update-crosspost-message-alist folder numbers) - t) +(luna-define-method elmo-folder-mark-as-read :before ((folder + elmo-nntp-folder) + numbers + &optional ignore-flags) + (elmo-nntp-folder-update-crosspost-message-alist folder numbers)) (luna-define-method elmo-folder-process-crosspost ((folder elmo-nntp-folder) &optional @@ -1573,19 +1554,12 @@ Returns a list of cons cells like (NUMBER . VALUE)" elmo-crosspost-message-alist))) (elmo-nntp-folder-set-reads-internal folder reads))) -(luna-define-method elmo-folder-list-unreads-internal - ((folder elmo-nntp-folder) unread-marks mark-alist) +(luna-define-method elmo-folder-list-unreads :around ((folder + elmo-nntp-folder)) ;; 2.3. elmo-folder-list-unreads return unread message list according to ;; `reads' slot. - (let ((mark-alist (or mark-alist (elmo-msgdb-get-mark-alist - (elmo-folder-msgdb folder))))) - (elmo-living-messages (delq nil - (mapcar - (lambda (x) - (if (member (nth 1 x) unread-marks) - (car x))) - mark-alist)) - (elmo-nntp-folder-reads-internal folder)))) + (elmo-living-messages (luna-call-next-method) + (elmo-nntp-folder-reads-internal folder))) (require 'product) (product-provide (provide 'elmo-nntp) (require 'elmo-version))