*** empty log message ***
authorLars Magne Ingebrigtsen <larsi@gnus.org>
Fri, 12 Nov 1999 04:25:21 +0000 (04:25 +0000)
committerLars Magne Ingebrigtsen <larsi@gnus.org>
Fri, 12 Nov 1999 04:25:21 +0000 (04:25 +0000)
lisp/ChangeLog
lisp/gnus-art.el
lisp/nnslashdot.el
texi/ChangeLog
texi/gnus.texi
texi/message.texi

index 0b01a47..6497d05 100644 (file)
@@ -1,3 +1,14 @@
+1999-11-12 05:04:43  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * nnslashdot.el (nnslashdot-group-number): Doc fix.
+       (nnslashdot-request-list): Use Ultramode as well.
+       (nnslashdot-date-to-date): Be more lenient.
+       (nnslashdot-threaded): New function.
+
+1999-11-11 17:40:54  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus-art.el (gnus-mime-internalize-part): Doc fix.
+
 1999-11-11 14:32:48  Steinar Bang  <sb@metis.no>
 
        * nnweb.el (nnweb-type-definition): /=dnc
index 3fe057b..029fa95 100644 (file)
@@ -2887,7 +2887,8 @@ If ALL-HEADERS is non-nil, no headers are hidden."
       (mm-display-part handle))))
 
 (defun gnus-mime-internalize-part (&optional handle)
-  "View the MIME part under point with an internal viewer."
+  "View the MIME part under point with an internal viewer.
+In no internal viewer is available, use an external viewer."
   (interactive)
   (gnus-article-check-buffer)
   (let* ((handle (or handle (get-text-property (point) 'gnus-data)))
index 37c8a4f..d43362a 100644 (file)
@@ -56,7 +56,7 @@
 (defvoo nnslashdot-active-url "http://slashdot.org/search.pl?section=&min=%d"
   "Where nnslashdot will fetch the active file from.")
 
-(defvoo nnslashdot-comments-url "http://slashdot.org/comments.pl?sid=%s&threshold=%d&commentsort=4&mode=flat&startat=%d"
+(defvoo nnslashdot-comments-url "http://slashdot.org/comments.pl?sid=%s&threshold=%d&commentsort=%d&mode=flat&startat=%d"
   "Where nnslashdot will fetch comments from.")
 
 (defvoo nnslashdot-article-url
 (defvoo nnslashdot-threshold -1
   "The article threshold.")
 
+(defvoo nnslashdot-threaded t
+  "Whether the nnslashdot groups should be threaded or not.")
+
 (defvoo nnslashdot-group-number 30
-  "The number of groups to keep updated.")
+  "The number of non-fresh groups to keep updated.")
 
 ;;; Internal variables
 
 
 (nnoo-define-basics nnslashdot)
 
-(deffoo nnslashdot-thread-retrieve-headers (articles &optional group server fetch-old)
+(deffoo nnslashdot-retrieve-headers (articles &optional group server fetch-old)
   (nnslashdot-possibly-change-server group server)
+  (unless gnus-nov-is-evil
+    (if nnslashdot-threaded
+       (nnslashdot-threaded-retrieve-headers articles group)
+      (nnslashdot-sane-retrieve-headers articles group))))
+  
+(deffoo nnslashdot-threaded-retrieve-headers (articles)
   (let ((last (car (last articles)))
        (did nil)
        (start 1)
        (sid (caddr (assoc group nnslashdot-groups)))
-       headers article subject score from date lines parent point
-       startats s)
-    (unless gnus-nov-is-evil
-      (save-excursion
-       (set-buffer nnslashdot-buffer)
-       (let ((case-fold-search t))
-         (erase-buffer)
-         (when (= start 1)
-           (nnweb-insert (format nnslashdot-article-url sid))
-           (goto-char (point-min))
-           (search-forward "Posted by ")
-           (when (looking-at "<a[^>]+>\\([^<]+\\)")
-             (setq from (match-string 1)))
-           (search-forward " on ")
-           (setq date (nnslashdot-date-to-date
-                       (buffer-substring (point) (1- (search-forward "<")))))
-           (forward-line 2)
-           (setq lines (count-lines
-                        (point)
-                        (search-forward
-                         "A href=http://slashdot.org/article.pl")))
-           (push
-            (cons
-             1
-             (make-full-mail-header
-              1 group from date (concat "<" sid "%1@slashdot>")
-              "" 0 lines nil nil))
-            headers)
-           (goto-char (point-max))
-           (while (re-search-backward "startat=\\([0-9]+\\)" nil t)
-             (setq s (match-string 1))
-             (unless (memq s startats)
-               (push s startats)))
-           (unless startats
-             (push 1 startats)))
-         (setq startats (sort startats '<))
-         (while (and (setq start (pop startats))
-                     (< start last))
-           (setq point (goto-char (point-max)))
-           (nnweb-insert
-            (format nnslashdot-comments-url sid nnslashdot-threshold start))
-           (goto-char point)
-           (while (re-search-forward
-                   "<a name=\"\\([0-9]+\\)\"><b>\\([^<]+\\)</b>.*score:\\([^)]+\\))"
-                   nil t)
-             (setq article (string-to-number (match-string 1))
-                   subject (match-string 2)
-                   score (match-string 3))
-             (when (string-match "^Re: *" subject)
-               (setq subject (concat "Re: " (substring subject (match-end 0)))))
-             (forward-line 1)
-             (if (looking-at
-                  "by <a[^>]+>\\([^<]+\\)</a>[ \t\n]*.*(\\([^)]+\\))")
-                 (setq from (concat (match-string 1)
-                                    " <" (match-string 2) ">"))
-               (looking-at "by \\(.+\\) on ")
-               (setq from (match-string 1)))
-             (goto-char (- (match-end 0) 5))
-             (search-forward " on ")
-             (setq date
-                   (nnslashdot-date-to-date
-                    (buffer-substring (point) (progn (end-of-line) (point)))))
-             (setq lines (/ (abs (- (search-forward "<td ")
-                                    (search-forward "</td>")))
-                            70))
-             (forward-line 2)
-             (setq parent
-                   (if (looking-at ".*cid=\\([0-9]+\\)")
-                       (match-string 1)
-                     nil))
-             (setq did t)
-             (push
-              (cons
-               (1+ article)
-               (make-full-mail-header
-                (1+ article) subject
-                from date
-                (concat "<" sid "%"
-                        (number-to-string (1+ article)) 
-                        "@slashdot>")
-                (if parent
-                    (concat "<" sid "%"
-                            (number-to-string (1+ (string-to-number parent)))
-                            "@slashdot>")
-                  "")
-                0 (string-to-number score) nil nil))
-              headers)))))
-      (setq nnslashdot-headers (sort headers 'car-less-than-car))
-      (save-excursion
-       (set-buffer nntp-server-buffer)
-       (erase-buffer)
-       (dolist (header nnslashdot-headers)
-         (nnheader-insert-nov (cdr header))))
-      'nov)))
-
-(deffoo nnslashdot-retrieve-headers (articles &optional group
-                                             server fetch-old)
-  (unless gnus-nov-is-evil
-    (nnslashdot-possibly-change-server group server)
-    (let ((last (car (last articles)))
-         (did nil)
-         (start (max (1- (car articles)) 1))
-         (sid (caddr (assoc group nnslashdot-groups)))
-         headers article subject score from date lines parent point)
-      (save-excursion
-       (set-buffer nnslashdot-buffer)
+       (first-comments t)
+       (startats '(1))
+       headers article subject score from date lines parent point s)
+    (save-excursion
+      (set-buffer nnslashdot-buffer)
+      (let ((case-fold-search t))
        (erase-buffer)
        (when (= start 1)
          (nnweb-insert (format nnslashdot-article-url sid))
          (setq date (nnslashdot-date-to-date
                      (buffer-substring (point) (1- (search-forward "<")))))
          (forward-line 2)
-         (setq lines (count-lines (point)
-                                  (search-forward
-                                   "A href=http://slashdot.org/article.pl")))
+         (setq lines (count-lines
+                      (point)
+                      (search-forward
+                       "A href=http://slashdot.org/article.pl")))
          (push
           (cons
            1
             1 group from date (concat "<" sid "%1@slashdot>")
             "" 0 lines nil nil))
           headers))
-       (while (or (not article)
-                  (and did
-                       (< article last)))
-         (when article
-           (setq start (1+ article)))
+       (while (and (setq start (pop startats))
+                   (< start last))
          (setq point (goto-char (point-max)))
          (nnweb-insert
-          (format nnslashdot-comments-url sid nnslashdot-threshold start))
+          (format nnslashdot-comments-url sid nnslashdot-threshold 0 start))
+         (when first-comments
+           (setq first-comments nil)
+           (goto-char (point-max))
+           (while (re-search-backward "startat=\\([0-9]+\\)" nil t)
+             (setq s (string-to-number (match-string 1)))
+             (unless (memq s startats)
+               (push s startats)))
+           (setq startats (sort startats '<)))
          (goto-char point)
          (while (re-search-forward
-                 "<a name=\"\\([0-9]+\\)\"><b>\\([^<]+\\)</b>.*score\\([^)]+\\))"
+                 "<a name=\"\\([0-9]+\\)\"><b>\\([^<]+\\)</b>.*score:\\([^)]+\\))"
                  nil t)
            (setq article (string-to-number (match-string 1))
                  subject (match-string 2)
                  score (match-string 3))
+           (when (string-match "^Re: *" subject)
+             (setq subject (concat "Re: " (substring subject (match-end 0)))))
            (forward-line 1)
            (if (looking-at
                 "by <a[^>]+>\\([^<]+\\)</a>[ \t\n]*.*(\\([^)]+\\))")
-               (setq from (concat (match-string 1) " <" (match-string 2) ">"))
+               (setq from (concat (match-string 1)
+                                  " <" (match-string 2) ">"))
              (looking-at "by \\(.+\\) on ")
              (setq from (match-string 1)))
            (goto-char (- (match-end 0) 5))
             (cons
              (1+ article)
              (make-full-mail-header
-              (1+ article) (concat subject " (" score ")")
+              (1+ article) subject
               from date
               (concat "<" sid "%"
                       (number-to-string (1+ article)) 
                           (number-to-string (1+ (string-to-number parent)))
                           "@slashdot>")
                 "")
-              0 lines nil nil))
-            headers))))
-      (setq nnslashdot-headers
-           (sort headers (lambda (s1 s2) (< (car s1) (car s2)))))
-      (save-excursion
-       (set-buffer nntp-server-buffer)
-       (erase-buffer)
-       (dolist (header nnslashdot-headers)
-         (nnheader-insert-nov (cdr header))))
-      'nov)))
+              0 (string-to-number score) nil nil))
+            headers)))))
+    (setq nnslashdot-headers (sort headers 'car-less-than-car))
+    (save-excursion
+      (set-buffer nntp-server-buffer)
+      (erase-buffer)
+      (dolist (header nnslashdot-headers)
+       (nnheader-insert-nov (cdr header))))
+    'nov))
+
+(deffoo nnslashdot-sane-retrieve-headers (articles group)
+  (let ((last (car (last articles)))
+       (did nil)
+       (start (max (1- (car articles)) 1))
+       (sid (caddr (assoc group nnslashdot-groups)))
+       headers article subject score from date lines parent point)
+    (save-excursion
+      (set-buffer nnslashdot-buffer)
+      (erase-buffer)
+      (when (= start 1)
+       (nnweb-insert (format nnslashdot-article-url sid))
+       (goto-char (point-min))
+       (search-forward "Posted by ")
+       (when (looking-at "<a[^>]+>\\([^<]+\\)")
+         (setq from (match-string 1)))
+       (search-forward " on ")
+       (setq date (nnslashdot-date-to-date
+                   (buffer-substring (point) (1- (search-forward "<")))))
+       (forward-line 2)
+       (setq lines (count-lines (point)
+                                (search-forward
+                                 "A href=http://slashdot.org/article.pl")))
+       (push
+        (cons
+         1
+         (make-full-mail-header
+          1 group from date (concat "<" sid "%1@slashdot>")
+          "" 0 lines nil nil))
+        headers))
+      (while (or (not article)
+                (and did
+                     (< article last)))
+       (when article
+         (setq start (1+ article)))
+       (setq point (goto-char (point-max)))
+       (nnweb-insert
+        (format nnslashdot-comments-url sid nnslashdot-threshold 4 start))
+       (goto-char point)
+       (while (re-search-forward
+               "<a name=\"\\([0-9]+\\)\"><b>\\([^<]+\\)</b>.*score\\([^)]+\\))"
+               nil t)
+         (setq article (string-to-number (match-string 1))
+               subject (match-string 2)
+               score (match-string 3))
+         (forward-line 1)
+         (if (looking-at
+              "by <a[^>]+>\\([^<]+\\)</a>[ \t\n]*.*(\\([^)]+\\))")
+             (setq from (concat (match-string 1) " <" (match-string 2) ">"))
+           (looking-at "by \\(.+\\) on ")
+           (setq from (match-string 1)))
+         (goto-char (- (match-end 0) 5))
+         (search-forward " on ")
+         (setq date
+               (nnslashdot-date-to-date
+                (buffer-substring (point) (progn (end-of-line) (point)))))
+         (setq lines (/ (abs (- (search-forward "<td ")
+                                (search-forward "</td>")))
+                        70))
+         (forward-line 2)
+         (setq parent
+               (if (looking-at ".*cid=\\([0-9]+\\)")
+                   (match-string 1)
+                 nil))
+         (setq did t)
+         (push
+          (cons
+           (1+ article)
+           (make-full-mail-header
+            (1+ article) (concat subject " (" score ")")
+            from date
+            (concat "<" sid "%"
+                    (number-to-string (1+ article)) 
+                    "@slashdot>")
+            (if parent
+                (concat "<" sid "%"
+                        (number-to-string (1+ (string-to-number parent)))
+                        "@slashdot>")
+              "")
+            0 lines nil nil))
+          headers))))
+    (setq nnslashdot-headers
+         (sort headers (lambda (s1 s2) (< (car s1) (car s2)))))
+    (save-excursion
+      (set-buffer nntp-server-buffer)
+      (erase-buffer)
+      (dolist (header nnslashdot-headers)
+       (nnheader-insert-nov (cdr header))))
+    'nov))
 
 (deffoo nnslashdot-request-group (group &optional server dont-check)
   (nnslashdot-possibly-change-server nil server)
   (nnslashdot-possibly-change-server nil server)
   (let ((number 0)
        sid elem description articles gname)
+    ;; First we do the Ultramode to get info on all the latest groups.
+    (with-temp-buffer
+      (nnweb-insert "http://slashdot.org/slashdot.xml")
+      (goto-char (point-min))
+      (while (search-forward "<story>" nil t)
+       (narrow-to-region (point) (search-forward "</story>"))
+       (goto-char (point-min))
+       (re-search-forward "<title>\\([^<]+\\)</title>")
+       (setq description (match-string 1))
+       (re-search-forward "<url>\\([^<]+\\)</url>")
+       (setq sid (match-string 1))
+       (string-match "/\\([0-9/]+\\).shtml" sid)
+       (setq sid (match-string 1 sid))
+       (re-search-forward "<comments>\\([^<]+\\)</comments>")
+       (setq articles (string-to-number (match-string 1)))
+       (setq gname (concat description " (" sid ")"))
+       (if (setq elem (assoc gname nnslashdot-groups))
+           (setcar (cdr elem) articles)
+         (push (list gname articles sid) nnslashdot-groups))
+       (goto-char (point-max))
+       (widen)))
+    ;; Then do the older groups.
     (while (> (- nnslashdot-group-number number) 0)
       (with-temp-buffer
        (let ((case-fold-search t))
             (format " *nnslashdot %s*" server))))))
 
 (defun nnslashdot-date-to-date (sdate)
-  (let ((elem (split-string sdate)))
+  (let ((elem (delete "" (split-string sdate))))
     (concat (substring (nth 0 elem) 0 3) " "
            (substring (nth 1 elem) 0 3) " "
            (substring (nth 2 elem) 0 2) " "
index 402c7d7..7db0b31 100644 (file)
@@ -1,5 +1,11 @@
+1999-11-12 05:26:22  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * gnus.texi (Slashdot): Addition.
+
 1999-11-11 04:32:57  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
+       * message.texi (News Headers): Fix.
+
        * gnus.texi (Browsing the Web): New.
        (Slashdot): New.
        (Ultimate): New.
index 1bf6840..a3e3997 100644 (file)
@@ -11776,6 +11776,14 @@ groups.
 The following variables can be altered to change its behavior:
 
 @table @code
+@item nnslashdot-threaded
+Whether @code{nnslashdot} should display threaded groups or not.  The
+default is @code{t}.  To be able to display threads, @code{nnslashdot}
+has to retrieve absolutely all comments in a group upon entry.  If a
+threaded display is not required, @code{nnslashdot} will only retrieve
+the comments that are actually wanted by the user.  Threading is nicer,
+but much, much slower than untreaded.
+
 @item nnslashdot-directory
 @vindex nnslashdot-directory
 Where @code{nnslashdot} will store its files.  The default value is
@@ -11791,7 +11799,7 @@ news articles and comments.  The default is
 @vindex nnslashdot-comments-url
 The @sc{url} format string that will be used to fetch comments.  The
 default is
-@samp{http://slashdot.org/comments.pl?sid=%s&threshold=%d&commentsort=4&mode=flat&startat=%d}.
+@samp{http://slashdot.org/comments.pl?sid=%s&threshold=%d&commentsort=%d&mode=flat&startat=%d}.
 
 @item nnslashdot-article-url
 @vindex nnslashdot-article-url
index 2391c1b..a5e285a 100644 (file)
@@ -856,11 +856,10 @@ This optional header will be computed by Message.
 @findex system-name
 @cindex Sun
 This required header will be generated by Message.  A unique ID will be
-created based on the date, time, user name and system name.  Message will
-use @code{mail-host-address} as the fully qualified domain name (FQDN)
-of the machine if that variable is defined.  If not, it will use
-@code{system-name}, which doesn't report a FQDN on some machines --
-notably Suns.
+created based on the date, time, user name and system name.  Message
+will use @code{system-name} to determine the name of the system.  If
+this isn't a fully qualified domain name (FQDN), Message will use
+@code{mail-host-address} as the FQDN of the machine.
 
 @item X-Newsreader
 @cindex X-Newsreader