Fix the return value of nnweb-request-article.
[gnus] / lisp / nnweb.el
index 06515d8..a1b1c38 100644 (file)
@@ -60,6 +60,7 @@ and `altavista'.")
 (defvar nnweb-type-definition
   '((dejanews
      (article . ignore)
+     (id . "http://search.dejanews.com/msgid.xp?MID=%s&fmt=text")
      (map . nnweb-dejanews-create-mapping)
      (search . nnweb-dejanews-search)
      (address . "http://www.deja.com/=dnc/qs.xp")
@@ -112,9 +113,10 @@ and `altavista'.")
     (set-buffer nntp-server-buffer)
     (erase-buffer)
     (let (article header)
-      (while (setq article (pop articles))
-       (when (setq header (cadr (assq article nnweb-articles)))
-         (nnheader-insert-nov header)))
+      (mm-with-unibyte-current-buffer
+       (while (setq article (pop articles))
+         (when (setq header (cadr (assq article nnweb-articles)))
+           (nnheader-insert-nov header))))
       'nov)))
 
 (deffoo nnweb-request-scan (&optional group server)
@@ -168,7 +170,8 @@ and `altavista'.")
     (let* ((header (cadr (assq article nnweb-articles)))
           (url (and header (mail-header-xref header))))
       (when (or (and url
-                    (nnweb-fetch-url url))
+                    (mm-with-unibyte-current-buffer
+                      (nnweb-fetch-url url)))
                (and (stringp article)
                     (nnweb-definition 'id t)
                     (let ((fetch (nnweb-definition 'id))
@@ -177,13 +180,14 @@ and `altavista'.")
                         (setq art (match-string 1 article)))
                       (and fetch
                            art
-                           (nnweb-fetch-url
-                            (format fetch article))))))
+                           (mm-with-unibyte-current-buffer
+                             (nnweb-fetch-url
+                              (format fetch article)))))))
        (unless nnheader-callback-function
          (funcall (nnweb-definition 'article))
          (nnweb-decode-entities))
        (nnheader-report 'nnweb "Fetched article %s" article)
-       t))))
+       (cons group (and (numberp article) article))))))
 
 (deffoo nnweb-close-server (&optional server)
   (when (and (nnweb-server-opened server)
@@ -202,9 +206,7 @@ and `altavista'.")
     t))
 
 (deffoo nnweb-request-update-info (group info &optional server)
-  (nnweb-possibly-change-server group server)
-  ;;(setcar (cddr info) nil)
-  )
+  (nnweb-possibly-change-server group server))
 
 (deffoo nnweb-asynchronous-p ()
   t)
@@ -230,7 +232,7 @@ and `altavista'.")
 (defun nnweb-read-overview (group)
   "Read the overview of GROUP and build the map."
   (when (file-exists-p (nnweb-overview-file group))
-    (with-temp-buffer
+    (mm-with-unibyte-buffer
       (nnheader-insert-file-contents (nnweb-overview-file group))
       (goto-char (point-min))
       (let (header)
@@ -298,22 +300,30 @@ and `altavista'.")
   (unless (gnus-buffer-live-p nnweb-buffer)
     (setq nnweb-buffer
          (save-excursion
-           (nnheader-set-temp-buffer
-            (format " *nnweb %s %s %s*" nnweb-type nnweb-search server))))))
+           (mm-with-unibyte
+             (nnheader-set-temp-buffer
+              (format " *nnweb %s %s %s*"
+                      nnweb-type nnweb-search server))
+             (current-buffer))))))
 
 (defun nnweb-fetch-url (url)
-  (save-excursion
-    (if (not nnheader-callback-function)
-       (let ((buf (current-buffer)))
-         (save-excursion
-           (set-buffer nnweb-buffer)
+  (let (buf)
+    (save-excursion
+      (if (not nnheader-callback-function)
+         (progn
+           (with-temp-buffer
+             (mm-enable-multibyte)
+             (let ((coding-system-for-read 'binary)
+                   (coding-system-for-write 'binary)
+                   (default-process-coding-system 'binary))
+               (nnweb-insert url))
+             (setq buf (buffer-string)))
            (erase-buffer)
-           (url-insert-file-contents url)
-           (copy-to-buffer buf (point-min) (point-max))
-           t))
-      (nnweb-url-retrieve-asynch
-       url 'nnweb-callback (current-buffer) nnheader-callback-function)
-      t)))
+           (insert buf)
+           t)
+       (nnweb-url-retrieve-asynch
+        url 'nnweb-callback (current-buffer) nnheader-callback-function)
+       t))))
 
 (defun nnweb-callback (buffer callback)
   (when (gnus-buffer-live-p url-working-buffer)
@@ -358,7 +368,7 @@ and `altavista'.")
            (active (or (cadr (assoc nnweb-group nnweb-group-alist))
                        (cons 1 0)))
            subject date from
-           map url parse a table group)
+           map url parse a table group text)
        (while more
          ;; Go through all the article hits on this page.
          (goto-char (point-min))
@@ -367,18 +377,20 @@ and `altavista'.")
          (dolist (row (nth 2 (car (nth 2 table))))
            (setq a (nnweb-parse-find 'a row)
                  url (cdr (assq 'href (nth 1 a)))
-                 text (nnweb-text row))
+                 text (nreverse (nnweb-text row)))
            (when a
-             (setq subject (nth 2 text)
-                   group (nth 4 text)
-                   date (nth 5 text)
-                   from (nth 6 text))
-             (string-match "\\([0-9]+\\)/\\([0-9]+\\)/\\([0-9]+\\)" date)
-             (setq date (format "%s %s %s"
-                                (car (rassq (string-to-number
-                                             (match-string 2 date))
-                                            parse-time-months))
-                                (match-string 3 date) (match-string 1 date)))
+             (setq subject (nth 4 text)
+                   group (nth 2 text)
+                   date (nth 1 text)
+                   from (nth 0 text))
+             (if (string-match "\\([0-9]+\\)/\\([0-9]+\\)/\\([0-9]+\\)" date)
+                 (setq date (format "%s %s 00:00:00 %s"
+                                    (car (rassq (string-to-number
+                                                 (match-string 2 date))
+                                                parse-time-months))
+                                    (match-string 3 date) 
+                                    (match-string 1 date)))
+               (setq date "Jan 1 00:00:00 0000"))
              (incf i)
              (setq url (concat url "&fmt=text"))
              (unless (nnweb-get-hashtb url)
@@ -468,7 +480,6 @@ and `altavista'.")
          (goto-char (point-min))
          (search-forward "</pre><hr>" nil t)
          (delete-region (point-min) (point))
-                                       ;(nnweb-decode-entities)
          (goto-char (point-min))
          (while (re-search-forward "^ +[0-9]+\\." nil t)
            (narrow-to-region
@@ -696,7 +707,7 @@ and `altavista'.")
    pairs "&"))
 
 (defun nnweb-fetch-form (url pairs)
-  "Fetch a form from URL with PAIRS as the data."
+  "Fetch a form from URL with PAIRS as the data using the POST method."
   (let ((url-request-data (nnweb-encode-www-form-urlencoded pairs))
        (url-request-method "POST")
        (url-request-extra-headers