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))))