Synch to No Gnus 200602241401.
authoryamaoka <yamaoka>
Fri, 24 Feb 2006 14:29:22 +0000 (14:29 +0000)
committeryamaoka <yamaoka>
Fri, 24 Feb 2006 14:29:22 +0000 (14:29 +0000)
lisp/ChangeLog
lisp/nnweb.el

index 3e9f3b9..8171353 100644 (file)
@@ -1,3 +1,17 @@
+2006-02-24  Reiner Steib  <Reiner.Steib@gmx.de>
+
+       * nnweb.el (nnweb-type-definition, nnweb-gmane-search): Use new
+       nov.php.
+
+2006-02-24  Andreas Seltenreich  <uwi7@stud.uni-karlsruhe.de>
+
+       * nnweb.el (nnweb-type-definition, nnweb-gmane-create-mapping)
+       (nnweb-gmane-wash-article, nnweb-gmane-search): Fix Gmane web
+       groups.  Kudos to Olly Betts <olly@survex.com> for providing NOV
+       output on the server side.
+        (nnweb-google-create-mapping): Update regexps and add some
+       progress indication.
+
 2006-02-23  Reiner Steib  <Reiner.Steib@gmx.de>
 
        * gnus-group.el (gnus-group-tool-bar-gnome): Fix
index 3a4a28d..3dd7cee 100644 (file)
@@ -27,9 +27,6 @@
 
 ;; Note: You need to have `w3' installed for some functions to work.
 
-;; FIXME: Due to changes in the HTML output of Gmane, stuff related to Gmane
-;; web groups (`gnus-group-make-web-group') doesn't work anymore.
-
 ;;; Code:
 
 (eval-when-compile (require 'cl))
@@ -82,7 +79,7 @@ Valid types include `google', `dejanews', and `gmane'.")
      (reference . identity)
      (map . nnweb-gmane-create-mapping)
      (search . nnweb-gmane-search)
-     (address . "http://gmane.org/")
+     (address . "http://search.gmane.org/nov.php")
      (identifier . nnweb-gmane-identity)))
   "Type-definition alist.")
 
@@ -407,6 +404,7 @@ Valid types include `google', `dejanews', and `gmane'.")
   (save-excursion
     (set-buffer nnweb-buffer)
     (erase-buffer)
+    (nnheader-message 7 "Searching google...")
     (when (funcall (nnweb-definition 'search) nnweb-search)
       (let ((more t)
            (i 0))
@@ -417,15 +415,18 @@ Valid types include `google', `dejanews', and `gmane'.")
          (goto-char (point-min))
          (incf i 100)
          (if (or (not (re-search-forward
-                       "<td><a href=\"\n\\([^>\"]+\\)\"><img src=\"/img/nav_next" nil t))
+                       "<a href=\"\n\\([^>\"]+\\)\"><img src=\"[^\"]+next"
+                       nil t))
                  (>= i nnweb-max-hits))
              (setq more nil)
            ;; Yup, there are more articles
            (setq more (concat (nnweb-definition 'base) (match-string 1)))
            (when more
              (erase-buffer)
+             (nnheader-message 7 "Searching google...(%d)" i)
              (mm-url-insert more))))
        ;; Return the articles in the right order.
+       (nnheader-message 7 "Searching google...done")
        (setq nnweb-articles
              (sort nnweb-articles 'car-less-than-car))))))
 
@@ -458,46 +459,61 @@ Valid types include `google', `dejanews', and `gmane'.")
   "Perform the search and create a number-to-url alist."
   (save-excursion
     (set-buffer nnweb-buffer)
-    (erase-buffer)
-    (when (funcall (nnweb-definition 'search) nnweb-search)
-      (let ((more t)
-           (case-fold-search t)
-           (active (or (cadr (assoc nnweb-group nnweb-group-alist))
-                       (cons 1 0)))
-           subject group url
-           map)
-         ;; Remove stuff from the beginning of results
-       (goto-char (point-min))
-       (search-forward "Search Results</h1><ul>" nil t)
-       (delete-region (point-min) (point))
+    (let ((case-fold-search t)
+         (active (or (cadr (assoc nnweb-group nnweb-group-alist))
+                     (cons 1 0)))
+         map)
+      (erase-buffer)
+      (nnheader-message 7 "Searching Gmane..." )
+      (when (funcall (nnweb-definition 'search) nnweb-search)
        (goto-char (point-min))
-       ;; Iterate over the actual hits
-       (while (re-search-forward ".*href=\"\\([^\"]+\\)\">\\(.*\\)" nil t)
-           (setq url (concat "http://gmane.org/" (match-string 1)))
-           (setq subject (match-string 2))
-         (unless (nnweb-get-hashtb url)
-           (push
-            (list
-             (incf (cdr active))
-             (make-full-mail-header
-              (cdr active) (concat  "(" group ") " subject) nil nil
-              nil nil 0 0 url))
-            map)
-           (nnweb-set-hashtb (cadar map) (car map))))
-       ;; Return the articles in the right order.
-       (setq nnweb-articles
-             (sort (nconc nnweb-articles map) 'car-less-than-car))))))
+       ;; Skip the status line
+       (forward-line 1)
+       ;; Thanks to Olly Betts we now have NOV lines in our buffer!
+       (while (not (eobp))
+         (unless (eolp)
+           (let ((header (nnheader-parse-nov)))
+             (let ((xref (mail-header-xref header))
+                   (from (mail-header-from header))
+                   (subject (mail-header-subject header))
+                   (rfc2047-encoding-type 'mime))
+               (when (string-match " \\([^:]+\\):\\([0-9]+\\)" xref)
+                 (mail-header-set-xref
+                  header
+                  (format "http://article.gmane.org/%s/%s/raw"
+                          (match-string 1 xref)
+                          (match-string 2 xref))))
+
+               ;; Add host part to gmane-encrypted addresses
+               (when (string-match "@$" from)
+                 (mail-header-set-from header
+                                       (concat from "public.gmane.org")))
+
+               (mail-header-set-subject header
+                                        (rfc2047-encode-string subject))
+
+               (unless (nnweb-get-hashtb (mail-header-xref header))
+                 (push
+                  (list
+                   (incf (cdr active))
+                   header)
+                  map)
+                 (nnweb-set-hashtb (cadar map) (car map))))))
+         (forward-line 1)))
+      (nnheader-message 7 "Searching Gmane...done")
+      (setq nnweb-articles
+           (sort (nconc nnweb-articles map) 'car-less-than-car)))))
 
 (defun nnweb-gmane-wash-article ()
   (let ((case-fold-search t))
     (goto-char (point-min))
-    (search-forward "<!--X-Head-of-Message-->" nil t)
-    (delete-region (point-min) (point))
-    (goto-char (point-min))
-    (while (looking-at "^<li><em>\\([^ ]+\\)</em>.*</li>")
-      (replace-match "\\1\\2" t)
-      (forward-line 1))
-    (mm-url-remove-markup)))
+    (when (search-forward "<!--X-Head-of-Message-->" nil t)
+      (delete-region (point-min) (point))
+      (goto-char (point-min))
+      (while (looking-at "^<li><em>\\([^ ]+\\)</em>.*</li>")
+       (replace-match "\\1\\2" t)
+       (forward-line 1))
+      (mm-url-remove-markup))))
 
 (defun nnweb-gmane-search (search)
   (mm-url-insert
@@ -505,11 +521,13 @@ Valid types include `google', `dejanews', and `gmane'.")
     (nnweb-definition 'address)
     "?"
     (mm-url-encode-www-form-urlencoded
-     `(("query" . ,search)))))
+     `(("query" . ,search)
+       ("HITSPERPAGE" . ,(number-to-string nnweb-max-hits))))))
   (setq buffer-file-name nil)
+  (set-buffer-multibyte t)
+  (mm-decode-coding-region (point-min) (point-max) 'utf-8)
   t)
 
-
 (defun nnweb-gmane-identity (url)
   "Return a unique identifier based on URL."
   (if (string-match "group=\\(.+\\)" url)