X-Git-Url: https://cgit.sxemacs.org/?a=blobdiff_plain;f=lisp%2Fnnultimate.el;h=734ab7129a6a53bb69765ecdf68d1c9608e6fbf1;hb=227dd529d6f999e2f49d9b0c93ce5fef64114433;hp=161f89866cc67b0c59f4c9ca6ea540ccf9eedf49;hpb=2e8ed0ac1c3e5a1454139d04de846f7e4261e12d;p=gnus diff --git a/lisp/nnultimate.el b/lisp/nnultimate.el index 161f89866..734ab7129 100644 --- a/lisp/nnultimate.el +++ b/lisp/nnultimate.el @@ -1,5 +1,5 @@ ;;; nnultimate.el --- interfacing with the Ultimate Bulletin Board system -;; Copyright (C) 1999 Free Software Foundation, Inc. +;; Copyright (C) 1999, 2000 Free Software Foundation, Inc. ;; Author: Lars Magne Ingebrigtsen ;; Keywords: news @@ -36,17 +36,11 @@ (require 'gnus) (require 'nnmail) (require 'mm-util) -(require 'nnweb) (eval-when-compile (ignore-errors - (require 'w3) - (require 'url) - (require 'w3-forms))) + (require 'nnweb))) ;; Report failure to find w3 at load time if appropriate. -(eval '(progn - (require 'w3) - (require 'url) - (require 'w3-forms))) +(eval '(require 'nnweb)) (nnoo-declare nnultimate) @@ -88,7 +82,8 @@ (while (and (setq article (car articles)) map) (while (and map - (> article (caar map))) + (or (> article (caar map)) + (< (cadar map) (caar map)))) (pop map)) (when (setq mmap (car map)) (setq farticle -1) @@ -114,7 +109,7 @@ (set-buffer nntp-server-buffer) (erase-buffer)) (setq nnultimate-articles nil) - (with-temp-buffer + (mm-with-unibyte-buffer (dolist (elem fetchers) (setq pages 1 current-page 1 @@ -130,7 +125,8 @@ "-" (number-to-string current-page) (match-string 0 href)))) (goto-char (point-min)) - (setq contents (w3-parse-buffer (current-buffer))) + (setq contents + (ignore-errors (w3-parse-buffer (current-buffer)))) (setq table (nnultimate-find-forum-table contents)) (setq string (mapconcat 'identity (nnweb-text table) "")) (when (string-match "topic is \\([0-9]\\) pages" string) @@ -143,7 +139,7 @@ ;;(setq total-contents (nreverse total-contents)) (dolist (art (cdr elem)) (if (not (nth (1- (cdr art)) total-contents)) - ();(debug) + () ;(debug) (push (list (car art) (nth (1- (cdr art)) total-contents) subject) @@ -183,7 +179,7 @@ article subject from (or date "") (concat "<" (number-to-string sid) "%" - (number-to-string article) + (number-to-string article) "@ultimate>") "" 0 (/ (length (mapconcat @@ -197,17 +193,15 @@ (setq nnultimate-headers (sort headers 'car-less-than-car)) (save-excursion (set-buffer nntp-server-buffer) - (erase-buffer) - (dolist (header nnultimate-headers) - (nnheader-insert-nov (cdr header))))) - (setcar (nthcdr 6 entry) (nth 1 entry)) - (nnultimate-write-groups) + (mm-with-unibyte-current-buffer + (erase-buffer) + (dolist (header nnultimate-headers) + (nnheader-insert-nov (cdr header)))))) 'nov))) (deffoo nnultimate-request-group (group &optional server dont-check) (nnultimate-possibly-change-server nil server) - (when (or (not dont-check) - (not nnultimate-groups)) + (when (not nnultimate-groups) (nnultimate-request-list)) (unless dont-check (nnultimate-create-mapping group)) @@ -221,6 +215,10 @@ "211 %d %d %d %s\n" (cadr elem) 1 (cadr elem) (prin1-to-string group)))))) +(deffoo nnultimate-request-close () + (setq nnultimate-groups-alist nil + nnultimate-groups nil)) + (deffoo nnultimate-request-article (article &optional group server buffer) (nnultimate-possibly-change-server group server) (let ((contents (cdr (assq article nnultimate-articles)))) @@ -233,14 +231,18 @@ (goto-char (point-min)) (insert "Content-Type: text/html\nMIME-Version: 1.0\n") (let ((header (cdr (assq article nnultimate-headers)))) - (nnheader-insert-header header)) + (mm-with-unibyte-current-buffer + (nnheader-insert-header header))) (nnheader-report 'nnultimate "Fetched article %s" article) (cons group article))))) (deffoo nnultimate-request-list (&optional server) (nnultimate-possibly-change-server nil server) - (with-temp-buffer - (nnweb-insert (concat nnultimate-address "Ultimate.cgi")) + (mm-with-unibyte-buffer + (nnweb-insert + (if (string-match "/$" nnultimate-address) + (concat nnultimate-address "Ultimate.cgi") + nnultimate-address)) (let ((contents (nth 2 (car (nth 2 (nnultimate-find-forum-table (w3-parse-buffer (current-buffer))))))) @@ -263,7 +265,7 @@ (setq forum (string-to-number (match-string 1 href))) (if (setq elem (assoc group nnultimate-groups)) (setcar (cdr elem) articles) - (push (list group articles forum description nil nil nil) + (push (list group articles forum description nil nil nil nil) nnultimate-groups)))))) (nnultimate-write-groups) (nnultimate-generate-active) @@ -278,6 +280,12 @@ ;;; Internal functions +(defun nnultimate-prune-days (group time) + "Compute the number of days to fetch info for." + (let ((old-time (nth 7 (assoc group nnultimate-groups)))) + (if (null old-time) + 1000 + (- (time-to-days time) (time-to-days old-time))))) (defun nnultimate-create-mapping (group) (let* ((entry (assoc group nnultimate-groups)) @@ -285,11 +293,15 @@ (topics (nth 4 entry)) (mapping (nth 5 entry)) (old-total (or (nth 6 entry) 1)) - (furl "forumdisplay.cgi?action=topics&number=%d&DaysPrune=1000") + (current-time (current-time)) + (furl + (concat "forumdisplay.cgi?action=topics&number=%d&DaysPrune=" + (number-to-string + (nnultimate-prune-days group current-time)))) (furls (list (concat nnultimate-address (format furl sid)))) contents forum-contents furl-fetched a subject href garticles topic tinfo old-max inc parse) - (with-temp-buffer + (mm-with-unibyte-buffer (while furls (erase-buffer) (nnweb-insert (pop furls)) @@ -299,10 +311,10 @@ (cdr (nth 2 (car (nth 2 (nnultimate-find-forum-table parse)))))) (setq forum-contents (nconc contents forum-contents)) - (when (and (not mapping) - (not furl-fetched)) + (unless furl-fetched (setq furl-fetched t) - ;; On the first mapping, we fetch all the forum URLs. + ;; On the first time through this loop, we find all the + ;; forum URLs. (dolist (a (nnweb-parse-find-all 'a parse)) (let ((href (cdr (assq 'href (nth 1 a))))) (when (and href @@ -331,25 +343,28 @@ (setq art (1+ (string-to-number (car artlist))))) (pop artlist)) (setq garticles art)) - (string-match "/\\([0-9]+\\).html" href) - (setq topic (string-to-number (match-string 1 href))) - (if (setq tinfo (assq topic topics)) - (progn - (setq old-max (cadr tinfo)) - (setcar (cdr tinfo) garticles)) - (setq old-max 0) - (push (list topic garticles subject href) topics) - (setcar (nthcdr 4 entry) topics)) - (when (not (= old-max garticles)) - (setq inc (- garticles old-max)) - (setq mapping (nconc mapping - (list - (list - old-total (1- (incf old-total inc)) - topic (1+ old-max))))) - (incf old-max inc) - (setcar (nthcdr 5 entry) mapping) - (setcar (nthcdr 6 entry) old-total))))) + (when garticles + (string-match "/\\([0-9]+\\).html" href) + (setq topic (string-to-number (match-string 1 href))) + (if (setq tinfo (assq topic topics)) + (progn + (setq old-max (cadr tinfo)) + (setcar (cdr tinfo) garticles)) + (setq old-max 0) + (push (list topic garticles subject href) topics) + (setcar (nthcdr 4 entry) topics)) + (when (not (= old-max garticles)) + (setq inc (- garticles old-max)) + (setq mapping (nconc mapping + (list + (list + old-total (1- (incf old-total inc)) + topic (1+ old-max))))) + (incf old-max inc) + (setcar (nthcdr 5 entry) mapping) + (setcar (nthcdr 6 entry) old-total)))))) + (setcar (nthcdr 7 entry) current-time) + (setcar (nthcdr 1 entry) (1- old-total)) (nnultimate-write-groups) mapping)) @@ -358,10 +373,10 @@ (when (and server (not (nnultimate-server-opened server))) (nnultimate-open-server server)) -; (unless nnultimate-groups-alist + (unless nnultimate-groups-alist (nnultimate-read-groups) - (setq nnultimate-groups (cdr (assoc nnultimate-address - nnultimate-groups-alist)))) + (setq nnultimate-groups (cdr (assoc nnultimate-address + nnultimate-groups-alist))))) (deffoo nnultimate-open-server (server &optional defs connectionless) (nnheader-init-server-buffer) @@ -375,7 +390,7 @@ (setq nnultimate-groups-alist nil) (let ((file (expand-file-name "groups" nnultimate-directory))) (when (file-exists-p file) - (with-temp-buffer + (mm-with-unibyte-buffer (insert-file-contents file) (goto-char (point-min)) (setq nnultimate-groups-alist (read (current-buffer))))))) @@ -425,9 +440,13 @@ case-fold-search) (when (and href (string-match "postings\\|forumdisplay\\|Forum[0-9]+/HTML\\|getbio" - href)) + href)) t)))) (provide 'nnultimate) +;; Local Variables: +;; coding: iso-8859-1 +;; End: + ;;; nnultimate.el ends here