(defun nnrss-fetch (url &optional local)
"Fetch URL and put it in a the expected Lisp structure."
(with-temp-buffer
- ;some CVS versions of url.el need this to close the connection quickly
- (let* (xmlform htmlform)
+ ;;some CVS versions of url.el need this to close the connection quickly
+ (let (xmlform htmlform)
;; bit o' work necessary for w3 pre-cvs and post-cvs
(if local
(let ((coding-system-for-read 'binary))
(insert-file-contents url))
(mm-url-insert url))
-;; Because xml-parse-region can't deal with anything that isn't
-;; xml and w3-parse-buffer can't deal with some xml, we have to
-;; parse with xml-parse-region first and, if that fails, parse
-;; with w3-parse-buffer. Yuck. Eventually, someone should find out
-;; why w3-parse-buffer fails to parse some well-formed xml and
-;; fix it.
-
- (condition-case err
- (setq xmlform (xml-parse-region (point-min) (point-max)))
- (error (if (fboundp 'w3-parse-buffer)
- (setq htmlform (caddar (w3-parse-buffer
- (current-buffer))))
- (message "nnrss: Not valid XML and w3 parse not available (%s)"
- url))))
- (if htmlform
- htmlform
- xmlform))))
+ ;; Because xml-parse-region can't deal with anything that isn't
+ ;; xml and w3-parse-buffer can't deal with some xml, we have to
+ ;; parse with xml-parse-region first and, if that fails, parse
+ ;; with w3-parse-buffer. Yuck. Eventually, someone should find out
+ ;; why w3-parse-buffer fails to parse some well-formed xml and
+ ;; fix it.
+
+ (condition-case err
+ (setq xmlform (xml-parse-region (point-min) (point-max)))
+ (error (if (fboundp 'w3-parse-buffer)
+ (setq htmlform (caddar (w3-parse-buffer
+ (current-buffer))))
+ (message "nnrss: Not valid XML and w3 parse not available (%s)"
+ url))))
+ (if htmlform
+ htmlform
+ xmlform))))
(defun nnrss-possibly-change-group (&optional group server)
(when (and server
(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 5 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)))
(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
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)))
+ (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 extra (or (nnrss-node-text content-ns 'encoded item)
+ (nnrss-node-text rss-ns 'description item)))
+ (not (gethash extra nnrss-group-hashtb))))
(setq subject (nnrss-node-text rss-ns 'title item))
- (setq extra (or (nnrss-node-text content-ns 'encoded item)
+ (setq extra (or extra
+ (nnrss-node-text content-ns 'encoded item)
(nnrss-node-text rss-ns 'description item)))
(setq author (or (nnrss-node-text rss-ns 'author item)
(nnrss-node-text dc-ns 'creator item)
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 extra) t nnrss-group-hashtb)
+ (setq changed t))
+ (setq extra nil))
(when changed
(nnrss-save-group-data group server)
(let ((pair (assoc group nnrss-server-data)))
"")
((eq (length nslist) 2) ; extract prefix
(cadr nslist)))))
- (if (and ns (not (eq ns "")))
+ (if (and ns (not (string= ns "")))
(concat ns ":")
ns)))