Function: nnrss-check-group
nnrss-check-group is a byte-compiled function defined in nnrss.el.gz.
Signature
(nnrss-check-group GROUP SERVER)
Source Code
;; Defined in /usr/src/emacs/lisp/gnus/nnrss.el.gz
(defun nnrss-check-group (group server)
(let (file xml subject url extra changed author date feed-subject
enclosure comments rss-ns content-ns dc-ns ;; rdf-ns
hash-index)
(if (and nnrss-use-local
(file-exists-p (setq file (expand-file-name
(nnrss-translate-file-chars
(concat group ".xml"))
nnrss-directory))))
(setq xml (nnrss-fetch file t))
(setq url (or (nth 2 (assoc-string group nnrss-server-data))
(cadr (assoc-string group nnrss-group-alist))))
(unless url
(setq url
(cdr
(assoc 'href
(nnrss-discover-feed
(read-string
(format "URL to search for %s: " group) "http://")))))
(let ((pair (assoc-string group nnrss-server-data)))
(if pair
(setcdr (cdr pair) (list url))
(push (list group nnrss-group-max url) nnrss-server-data)))
(setq changed t))
(setq xml (nnrss-fetch url)))
(setq dc-ns (nnrss-get-namespace-prefix xml "http://purl.org/dc/elements/1.1/")
;; rdf-ns (nnrss-get-namespace-prefix xml "http://www.w3.org/1999/02/22-rdf-syntax-ns#")
rss-ns (nnrss-get-namespace-prefix xml "http://purl.org/rss/1.0/")
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)
(string= (concat rss-ns "item") (car item))
(progn (setq hash-index (nnrss-make-hash-index item))
(not (gethash hash-index nnrss-group-hashtb))))
(setq subject (nnrss-node-text rss-ns 'title item))
(setq url (nnrss-decode-entities-string
(nnrss-node-text rss-ns 'link (cddr item))))
(setq extra (or (nnrss-node-text content-ns 'encoded item)
(nnrss-node-text rss-ns 'description item)))
(if (setq feed-subject (nnrss-node-text dc-ns 'subject item))
(setq extra (concat feed-subject "<br /><br />" extra)))
(setq author (or (nnrss-node-text rss-ns 'author item)
(nnrss-node-text dc-ns 'creator item)
(nnrss-node-text dc-ns 'contributor item)))
(setq date (nnrss-normalize-date
(or (nnrss-node-text dc-ns 'date item)
(nnrss-node-text rss-ns 'pubDate item))))
(setq comments (nnrss-node-text rss-ns 'comments item))
(when (setq enclosure (cadr (assq (intern (concat rss-ns "enclosure")) item)))
(let ((url (cdr (assq 'url enclosure)))
(len (cdr (assq 'length enclosure)))
(type (cdr (assq 'type enclosure)))
(name))
(setq len
(if (and len (integerp (setq len (string-to-number len))))
;; actually already in `ls-lisp-format-file-size' but
;; probably not worth to require it for one function
(cl-do ((size (/ len 1.0) (/ size 1024.0))
(post-fixes (list "" "k" "M" "G" "T" "P" "E")
(cdr post-fixes)))
((< size 1024)
(format "%.1f%s" size (car post-fixes))))
"0"))
(setq url (or url ""))
(setq name (if (string-match "/\\([^/]*\\)$" url)
(match-string 1 url)
"file"))
(setq type (or type ""))
(setq enclosure (list url name len type))))
(push
(list
(cl-incf nnrss-group-max)
(current-time)
url
(and subject (nnrss-mime-encode-string subject))
(and author (nnrss-mime-encode-string author))
date
(and extra (nnrss-decode-entities-string extra))
enclosure
comments
hash-index)
nnrss-group-data)
(puthash hash-index t nnrss-group-hashtb)
(setq changed t))
(setq extra nil))
(when changed
(nnrss-save-group-data group server)
(let ((pair (assoc-string group nnrss-server-data)))
(if pair
(setcar (cdr pair) nnrss-group-max)
(push (list group nnrss-group-max) nnrss-server-data)))
(nnrss-save-server-data server))))