Synch to No Gnus 200404290042.
[elisp/gnus.git-] / lisp / nnrss.el
index de4a5a9..0662862 100644 (file)
@@ -331,7 +331,7 @@ ARTICLE is the article number of the current headline.")
       (let ((coding-system-for-read 'binary))
        (load file nil t t))
       (dolist (e nnrss-group-data)
-       (puthash (nth 2 e) e nnrss-group-hashtb)
+       (puthash (or (nth 2 e) (nth 3 e)) t nnrss-group-hashtb)
        (when (and (car e) (> nnrss-group-min (car e)))
          (setq nnrss-group-min (car e)))
        (when (and (car e) (< nnrss-group-max (car e)))
@@ -341,7 +341,7 @@ ARTICLE is the article number of the current headline.")
   (gnus-make-directory nnrss-directory)
   (let ((coding-system-for-write 'binary))
     (with-temp-file (nnrss-make-filename group server)
-      (gnus-prin1 `(setq nnrss-group-data ',nnrss-group-data )))))
+      (gnus-prin1 `(setq nnrss-group-data ',nnrss-group-data)))))
 
 (defun nnrss-make-filename (name server)
   (expand-file-name
@@ -420,11 +420,13 @@ ARTICLE is the article number of the current headline.")
          content-ns (nnrss-get-namespace-prefix xml "http://purl.org/rss/1.0/modules/content/"))
     (dolist (item (nreverse (nnrss-find-el (intern (concat rss-ns "item")) xml)))
       (when (and (listp item)
-                (eq (intern (concat rss-ns "item")) (car item))
-                (setq url (nnrss-decode-entities-unibyte-string
-                           (nnrss-node-text rss-ns 'link (cddr item))))
-                (not (gethash url nnrss-group-hashtb)))
-       (setq subject (nnrss-node-text rss-ns 'title item))
+                (string= (concat rss-ns "item") (car item))
+                (if (setq url (nnrss-decode-entities-unibyte-string
+                               (nnrss-node-text rss-ns 'link (cddr item))))
+                    (not (gethash url nnrss-group-hashtb))
+                  (setq subject (nnrss-node-text rss-ns 'title item))
+                  (not (gethash subject nnrss-group-hashtb))))
+       (setq subject (or subject (nnrss-node-text rss-ns 'title item)))
        (setq extra (or (nnrss-node-text content-ns 'encoded item)
                        (nnrss-node-text rss-ns 'description item)))
        (setq author (or (nnrss-node-text rss-ns 'author item)
@@ -443,8 +445,9 @@ ARTICLE is the article number of the current headline.")
          date
          (and extra (nnrss-decode-entities-unibyte-string extra)))
         nnrss-group-data)
-       (puthash url (car nnrss-group-data) nnrss-group-hashtb)
-       (setq changed t)))
+       (puthash (or url subject) t nnrss-group-hashtb)
+       (setq changed t))
+       (setq subject nil))
     (when changed
       (nnrss-save-group-data group server)
       (let ((pair (assoc group nnrss-server-data)))
@@ -484,11 +487,11 @@ Export subscriptions to a buffer in OPML Format."
             "    <ownerName>" (user-full-name) "</ownerName>\n"
             "  </head>\n"
             "  <body>\n"))
-    (mapcar (lambda (sub)
-             (insert (concat
-                      "    <outline text=\"" (car sub) "\" xmlUrl=\""
-                      (cadr sub) "\"/>\n")))
-           nnrss-group-alist)
+    (mapc (lambda (sub)
+           (insert (concat
+                    "    <outline text=\"" (car sub) "\" xmlUrl=\""
+                    (cadr sub) "\"/>\n")))
+         nnrss-group-alist)
     (insert (concat
             "  </body>\n"
            "</opml>\n")))
@@ -565,24 +568,24 @@ It is useful when `(setq nnrss-use-local t)'."
 (defun nnrss-find-el (tag data &optional found-list)
   "Find the all matching elements in the data.
 Careful with this on large documents!"
-  (if (listp data)
-      (mapcar (lambda (bit)
-               (when (car-safe bit)
-                 (when (equal tag (car bit))
-                   (setq found-list
-                         (append found-list
-                                 (list bit))))
-                 (if (and (listp (car-safe (caddr bit)))
-                          (not (stringp (caddr bit))))
-                     (setq found-list
-                           (append found-list
-                                   (nnrss-find-el
-                                    tag (caddr bit))))
-                   (setq found-list
-                         (append found-list
-                                 (nnrss-find-el
-                                  tag (cddr bit)))))))
-             data))
+  (when (listp data)
+    (mapc (lambda (bit)
+           (when (car-safe bit)
+             (when (equal tag (car bit))
+               (setq found-list
+                     (append found-list
+                             (list bit))))
+             (if (and (listp (car-safe (caddr bit)))
+                      (not (stringp (caddr bit))))
+                 (setq found-list
+                       (append found-list
+                               (nnrss-find-el
+                                tag (caddr bit))))
+               (setq found-list
+                     (append found-list
+                             (nnrss-find-el
+                              tag (cddr bit)))))))
+         data))
   found-list)
 
 (defun nnrss-rsslink-p (el)
@@ -629,27 +632,27 @@ whether they are `offsite' or `onsite'."
        rss-onsite-in   rdf-onsite-in   xml-onsite-in
        rss-offsite-end rdf-offsite-end xml-offsite-end
        rss-offsite-in rdf-offsite-in xml-offsite-in)
-    (mapcar (lambda (href)
-             (if (not (null href))
-             (cond ((string-match "\\.rss$" href)
-                    (nnrss-match-macro
-                     base-uri href rss-onsite-end rss-offsite-end))
-                   ((string-match "\\.rdf$" href)
-                    (nnrss-match-macro
-                     base-uri href rdf-onsite-end rdf-offsite-end))
-                   ((string-match "\\.xml$" href)
-                    (nnrss-match-macro
-                     base-uri href xml-onsite-end xml-offsite-end))
-                   ((string-match "rss" href)
-                    (nnrss-match-macro
-                     base-uri href rss-onsite-in rss-offsite-in))
-                   ((string-match "rdf" href)
-                    (nnrss-match-macro
-                     base-uri href rdf-onsite-in rdf-offsite-in))
-                   ((string-match "xml" href)
-                    (nnrss-match-macro
-                     base-uri href xml-onsite-in xml-offsite-in)))))
-           hrefs)
+    (mapc (lambda (href)
+           (if (not (null href))
+               (cond ((string-match "\\.rss$" href)
+                      (nnrss-match-macro
+                       base-uri href rss-onsite-end rss-offsite-end))
+                     ((string-match "\\.rdf$" href)
+                      (nnrss-match-macro
+                       base-uri href rdf-onsite-end rdf-offsite-end))
+                     ((string-match "\\.xml$" href)
+                      (nnrss-match-macro
+                       base-uri href xml-onsite-end xml-offsite-end))
+                     ((string-match "rss" href)
+                      (nnrss-match-macro
+                       base-uri href rss-onsite-in rss-offsite-in))
+                     ((string-match "rdf" href)
+                      (nnrss-match-macro
+                       base-uri href rdf-onsite-in rdf-offsite-in))
+                     ((string-match "xml" href)
+                      (nnrss-match-macro
+                       base-uri href xml-onsite-in xml-offsite-in)))))
+         hrefs)
     (append
      rss-onsite-end  rdf-onsite-end  xml-onsite-end
      rss-onsite-in   rdf-onsite-in   xml-onsite-in
@@ -774,7 +777,7 @@ prefix), return the prefix."
                    "")
                   ((eq (length nslist) 2) ; extract prefix
                    (cadr nslist)))))
-    (if (and ns (not (eq ns "")))
+    (if (and ns (not (string= ns "")))
        (concat ns ":")
       ns)))