annotate lisp/net/newsticker-backend.el @ 95675:c9fb857e1ebe

Initial check-in.
author Ulf Jasper <ulf.jasper@web.de>
date Sun, 08 Jun 2008 15:35:18 +0000
parents
children 4ab45b5c92cd
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
95675
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1 ;;; newsticker-backend.el --- Retrieval backend for newsticker.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
3 ;; Copyright (C) 2008 Free Software Foundation, Inc.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
4
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
5 ;; This file is part of GNU Emacs.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
6
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
7 ;; Author: Ulf Jasper <ulf.jasper@web.de>
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
8 ;; Filename: newsticker-backend.el
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
9 ;; URL: http://www.nongnu.org/newsticker
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
10 ;; Keywords: News, RSS, Atom
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
11 ;; Time-stamp: "8. Juni 2008, 17:18:04 (ulf)"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
12 ;; CVS-Version: $Id: newsticker-backend.el,v 1.16 2008/05/09 17:42:22 u11 Exp $
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
13
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
14 ;; ======================================================================
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
15
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
16 ;; GNU Emacs is free software: you can redistribute it and/or modify
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
17 ;; it under the terms of the GNU General Public License as published by
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
18 ;; the Free Software Foundation, either version 3 of the License, or
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
19 ;; (at your option) any later version.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
20
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
21 ;; GNU Emacs is distributed in the hope that it will be useful,
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
22 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
23 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
24 ;; GNU General Public License for more details.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
25
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
26 ;; You should have received a copy of the GNU General Public License
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
27 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
28
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
29 ;; ======================================================================
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
30
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
31 ;;; Commentary:
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
32
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
33 ;; See newsticker.el
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
34
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
35 ;; ======================================================================
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
36 ;;; Code:
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
37
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
38 (require 'derived)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
39 (require 'xml)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
40
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
41 ;; Silence warnings
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
42 (defvar tool-bar-map)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
43 (defvar w3-mode-map)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
44 (defvar w3m-minor-mode-map)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
45
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
46
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
47 (defvar newsticker--retrieval-timer-list nil
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
48 "List of timers for news retrieval.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
49 This is an alist, each element consisting of (feed-name . timer).")
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
50
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
51 (defvar newsticker--download-logos nil
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
52 "If non-nil download feed logos if available.")
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
53
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
54 (defvar newsticker--sentinel-callback nil
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
55 "Function called at end of `newsticker--sentinel'.")
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
56
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
57 ;;;###autoload
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
58 (defun newsticker-running-p ()
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
59 "Check whether newsticker is running.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
60 Return t if newsticker is running, nil otherwise. Newsticker is
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
61 considered to be running if the newsticker timer list is not empty."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
62 (> (length newsticker--retrieval-timer-list) 0))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
63
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
64 ;; ======================================================================
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
65 ;;; Customization
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
66 ;; ======================================================================
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
67 (defgroup newsticker nil
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
68 "Aggregator for RSS and Atom feeds."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
69 :group 'applications)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
70
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
71 (defconst newsticker--raw-url-list-defaults
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
72 '(("CNET News.com"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
73 "http://export.cnet.com/export/feeds/news/rss/1,11176,,00.xml")
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
74 ("Debian Security Advisories"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
75 "http://www.debian.org/security/dsa.en.rdf")
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
76 ("Debian Security Advisories - Long format"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
77 "http://www.debian.org/security/dsa-long.en.rdf")
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
78 ("Emacs Wiki"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
79 "http://www.emacswiki.org/cgi-bin/wiki.pl?action=rss"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
80 nil
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
81 3600)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
82 ("Freshmeat.net"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
83 "http://freshmeat.net/backend/fm.rdf")
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
84 ("Kuro5hin.org"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
85 "http://www.kuro5hin.org/backend.rdf")
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
86 ("LWN (Linux Weekly News)"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
87 "http://lwn.net/headlines/rss")
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
88 ("NewsForge"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
89 "http://newsforge.com/index.rss")
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
90 ("NY Times: Technology"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
91 "http://partners.userland.com/nytRss/technology.xml")
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
92 ("NY Times"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
93 "http://partners.userland.com/nytRss/nytHomepage.xml")
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
94 ("Quote of the day"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
95 "http://www.quotationspage.com/data/qotd.rss"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
96 "07:00"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
97 86400)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
98 ("The Register"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
99 "http://www.theregister.co.uk/tonys/slashdot.rdf")
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
100 ("slashdot"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
101 "http://slashdot.org/index.rss"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
102 nil
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
103 3600) ;/. will ban you if under 3600 seconds!
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
104 ("Wired News"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
105 "http://www.wired.com/news_drop/netcenter/netcenter.rdf")
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
106 ("Heise News (german)"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
107 "http://www.heise.de/newsticker/heise.rdf")
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
108 ("Tagesschau (german)"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
109 "http://www.tagesschau.de/newsticker.rdf"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
110 nil
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
111 1800)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
112 ("Telepolis (german)"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
113 "http://www.heise.de/tp/news.rdf"))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
114 "Default URL list in raw form.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
115 This list is fed into defcustom via `newsticker--splicer'.")
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
116
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
117 (defun newsticker--splicer (item)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
118 "Convert ITEM for splicing into `newsticker-url-list-defaults'."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
119 (let ((result (list 'list :tag (nth 0 item) (list 'const (nth 0 item))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
120 (element (cdr item)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
121 (while element
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
122 (setq result (append result (list (list 'const (car element)))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
123 (setq element (cdr element)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
124 result))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
125
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
126 (defun newsticker--set-customvar-retrieval (symbol value)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
127 "Set retrieval related newsticker-variable SYMBOL value to VALUE.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
128 Calls all actions which are necessary in order to make the new
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
129 value effective."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
130 (if (or (not (boundp symbol))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
131 (equal (symbol-value symbol) value))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
132 (set symbol value)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
133 ;; something must have changed
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
134 (let ((need-restart nil)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
135 (new-or-changed-feeds nil)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
136 (removed-feeds))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
137 (cond ((eq symbol 'newsticker-retrieval-interval)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
138 (setq need-restart t))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
139 ((memq symbol '(newsticker-url-list-defaults newsticker-url-list))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
140 (dolist (elt value)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
141 (unless (member elt (symbol-value symbol))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
142 (setq new-or-changed-feeds (cons elt new-or-changed-feeds))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
143 (dolist (elt (symbol-value symbol))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
144 (unless (member elt value)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
145 (setq removed-feeds (cons elt removed-feeds))))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
146 (cond (need-restart
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
147 (set symbol value)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
148 (when (newsticker-running-p)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
149 (message "Restarting newsticker")
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
150 (newsticker-stop)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
151 (newsticker-start)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
152 (t
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
153 (dolist (feed removed-feeds)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
154 (message "Stopping feed `%s'" (car feed))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
155 (newsticker--stop-feed (car feed)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
156 (dolist (feed new-or-changed-feeds)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
157 (message "Starting feed `%s'" (car feed))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
158 (newsticker--stop-feed (car feed))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
159 (newsticker--start-feed feed))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
160 (unless new-or-changed-feeds
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
161 (when newsticker--sentinel-callback
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
162 (funcall newsticker--sentinel-callback)))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
163 (set symbol value))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
164
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
165 ;; ======================================================================
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
166 ;; retrieval
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
167 (defgroup newsticker-retrieval nil
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
168 "Settings for news retrieval."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
169 :group 'newsticker)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
170
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
171 (defcustom newsticker-url-list-defaults
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
172 '(("Emacs Wiki"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
173 "http://www.emacswiki.org/cgi-bin/wiki.pl?action=rss"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
174 nil
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
175 3600))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
176 "A customizable list of news feeds to select from.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
177 These were mostly extracted from the Radio Community Server at
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
178 http://subhonker6.userland.com/rcsPublic/rssHotlist.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
179
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
180 You may add other entries in `newsticker-url-list'."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
181 :type `(set ,@(mapcar `newsticker--splicer
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
182 newsticker--raw-url-list-defaults))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
183 :set 'newsticker--set-customvar-retrieval
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
184 :group 'newsticker-retrieval)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
185
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
186 (defcustom newsticker-url-list nil
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
187 "The news feeds which you like to watch.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
188
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
189 This alist will be used in addition to selection made customizing
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
190 `newsticker-url-list-defaults'.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
191
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
192 This is an alist. Each element consists of two items: a LABEL and a URL,
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
193 optionally followed by a START-TIME, INTERVAL specifier and WGET-ARGUMENTS.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
194
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
195 The LABEL gives the name of the news feed. It can be an arbitrary string.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
196
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
197 The URL gives the location of the news feed. It must point to a valid
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
198 RSS or Atom file. The file is retrieved by calling wget, or whatever you
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
199 specify as `newsticker-wget-name'.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
200
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
201 URL may also be a function which returns news data. In this case
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
202 `newsticker-retrieval-method' etc. are ignored for this feed.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
203
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
204 The START-TIME can be either a string, or nil. If it is a string it
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
205 specifies a fixed time at which this feed shall be retrieved for the
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
206 first time. (Examples: \"11:00pm\", \"23:00\".) If it is nil (or
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
207 unspecified), this feed will be retrieved immediately after calling
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
208 `newsticker-start'.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
209
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
210 The INTERVAL specifies the time between retrievals for this feed. If it
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
211 is nil (or unspecified) the default interval value as set in
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
212 `newsticker-retrieval-interval' is used.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
213
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
214 \(newsticker.el calls `run-at-time'. The newsticker-parameters START-TIME
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
215 and INTERVAL correspond to the `run-at-time'-parameters TIME and REPEAT.)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
216
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
217 WGET-ARGUMENTS specifies arguments for wget (see `newsticker-wget-name')
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
218 which apply for this feed only, overriding the value of
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
219 `newsticker-wget-arguments'."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
220 :type '(repeat (list :tag "News feed"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
221 (string :tag "Label")
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
222 (choice :tag "URI"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
223 (string :tag "String")
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
224 (function :tag "Function"))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
225 (choice :tag "Start"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
226 (const :tag "Default" nil)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
227 (string :tag "Fixed Time"))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
228 (choice :tag "Interval"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
229 (const :tag "Default" nil)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
230 (const :tag "Hourly" 3600)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
231 (const :tag "Daily" 86400)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
232 (const :tag "Weekly" 604800)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
233 (integer :tag "Interval"))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
234 (choice :tag "Wget Arguments"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
235 (const :tag "Default arguments" nil)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
236 (repeat :tag "Special arguments" string))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
237 :set 'newsticker--set-customvar-retrieval
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
238 :group 'newsticker-retrieval)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
239
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
240 (defcustom newsticker-retrieval-method
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
241 'intern
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
242 "Method for retrieving news from the web, either `intern' or `extern'.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
243 Default value `intern' uses Emacs' built-in asynchronous download
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
244 capabilities ('url-retrieve'). If set to `extern' the external
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
245 program wget is used, see `newsticker-wget-name'."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
246 :type '(choice :tag "Method"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
247 (const :tag "Intern" intern)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
248 (const :tag "Extern" extern))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
249 :group 'newsticker-retrieval)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
250
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
251 (defcustom newsticker-wget-name
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
252 "wget"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
253 "Name of the program which is called to retrieve news from the web.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
254 The canonical choice is wget but you may take any other program which is
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
255 able to return the contents of a news feed file on stdout."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
256 :type 'string
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
257 :group 'newsticker-retrieval)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
258
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
259 (defcustom newsticker-wget-arguments
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
260 '("-q" "-O" "-")
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
261 "Arguments which are passed to wget.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
262 There is probably no reason to change the default settings, unless you
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
263 are living behind a firewall."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
264 :type '(repeat (string :tag "Argument"))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
265 :group 'newsticker-retrieval)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
266
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
267 (defcustom newsticker-retrieval-interval
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
268 3600
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
269 "Time interval for retrieving new news items (seconds).
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
270 If this value is not positive (i.e. less than or equal to 0)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
271 items are retrieved only once!
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
272 Please note that some feeds, e.g. Slashdot, will ban you if you
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
273 make it less than 1800 seconds (30 minutes)!"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
274 :type '(choice :tag "Interval"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
275 (const :tag "No automatic retrieval" 0)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
276 (const :tag "Hourly" 3600)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
277 (const :tag "Daily" 86400)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
278 (const :tag "Weekly" 604800)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
279 (integer :tag "Interval"))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
280 :set 'newsticker--set-customvar-retrieval
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
281 :group 'newsticker-retrieval)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
282
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
283 (defcustom newsticker-desc-comp-max
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
284 100
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
285 "Relevant length of headline descriptions.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
286 This value gives the maximum number of characters which will be
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
287 taken into account when newsticker compares two headline
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
288 descriptions."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
289 :type 'integer
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
290 :group 'newsticker-retrieval)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
291
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
292 ;; ======================================================================
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
293 ;; headline processing
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
294 (defgroup newsticker-headline-processing nil
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
295 "Settings for the automatic processing of headlines."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
296 :group 'newsticker)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
297
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
298 (defcustom newsticker-automatically-mark-items-as-old
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
299 t
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
300 "Decides whether to automatically mark items as old.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
301 If t a new item is considered as new only after its first retrieval. As
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
302 soon as it is retrieved a second time, it becomes old. If not t all
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
303 items stay new until you mark them as old. This is done in the
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
304 *newsticker* buffer."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
305 :type 'boolean
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
306 :group 'newsticker-headline-processing)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
307
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
308 (defcustom newsticker-automatically-mark-visited-items-as-old
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
309 t
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
310 "Decides whether to automatically mark visited items as old.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
311 If t an item is marked as old as soon as the associated link is
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
312 visited, i.e. after pressing RET or mouse2 on the item's
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
313 headline."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
314
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
315 :type 'boolean
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
316 :group 'newsticker-headline-processing)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
317
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
318 (defcustom newsticker-keep-obsolete-items
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
319 t
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
320 "Decides whether to keep unread items which have been removed from feed.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
321 If t a new item, which has been removed from the feed, is kept in
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
322 the cache until it is marked as read."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
323 :type 'boolean
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
324 :group 'newsticker-headline-processing)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
325
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
326 (defcustom newsticker-obsolete-item-max-age
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
327 (* 60 60 24)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
328 "Maximal age of obsolete items, in seconds.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
329 Obsolete items which are older than this value will be silently
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
330 deleted at the next retrieval."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
331 :type 'integer
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
332 :group 'newsticker-headline-processing)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
333
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
334 (defcustom newsticker-auto-mark-filter-list
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
335 nil
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
336 "A list of filters for automatically marking headlines.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
337
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
338 This is an alist of the form (FEED-NAME PATTERN-LIST). I.e. each
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
339 element consists of a FEED-NAME a PATTERN-LIST. Each element of
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
340 the pattern-list has the form (AGE TITLE-OR-DESCRIPTION REGEXP).
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
341 AGE must be one of the symbols 'old or 'immortal.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
342 TITLE-OR-DESCRIPTION must be on of the symbols 'title,
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
343 'description, or 'all. REGEXP is a regular expression, i.e. a
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
344 string.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
345
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
346 This filter is checked after a new headline has been retrieved.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
347 If FEED-NAME matches the name of the corresponding news feed, the
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
348 pattern-list is checked: The new headline will be marked as AGE
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
349 if REGEXP matches the headline's TITLE-OR-DESCRIPTION.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
350
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
351 If, for example, `newsticker-auto-mark-filter-list' looks like
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
352 \((slashdot ('old 'title \"^Forget me!$\") ('immortal 'title \"Read me\")
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
353 \('immortal 'all \"important\"))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
354
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
355 then all articles from slashdot are marked as old if they have
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
356 the title \"Forget me!\". All articles with a title containing
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
357 the string \"Read me\" are marked as immortal. All articles which
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
358 contain the string \"important\" in their title or their
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
359 description are marked as immortal."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
360 :type '(repeat (list :tag "Auto mark filter"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
361 (string :tag "Feed name")
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
362 (repeat
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
363 (list :tag "Filter element"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
364 (choice
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
365 :tag "Auto-assigned age"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
366 (const :tag "Old" old)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
367 (const :tag "Immortal" immortal))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
368 (choice
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
369 :tag "Title/Description"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
370 (const :tag "Title" title)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
371 (const :tag "Description" description)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
372 (const :tag "All" all))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
373 (string :tag "Regexp")))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
374 :group 'newsticker-headline-processing)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
375
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
376 ;; ======================================================================
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
377 ;; hooks
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
378 (defgroup newsticker-hooks nil
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
379 "Settings for newsticker hooks."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
380 :group 'newsticker)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
381
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
382 (defcustom newsticker-start-hook
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
383 nil
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
384 "Hook run when starting newsticker.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
385 This hook is run at the very end of `newsticker-start'."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
386 :options '(newsticker-start-ticker)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
387 :type 'hook
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
388 :group 'newsticker-hooks)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
389
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
390 (defcustom newsticker-stop-hook
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
391 nil
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
392 "Hook run when stopping newsticker.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
393 This hook is run at the very end of `newsticker-stop'."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
394 :options nil
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
395 :type 'hook
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
396 :group 'newsticker-hooks)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
397
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
398 (defcustom newsticker-new-item-functions
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
399 nil
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
400 "List of functions run after a new headline has been retrieved.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
401 Each function is called with the following three arguments:
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
402 FEED the name of the corresponding news feed,
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
403 TITLE the title of the headline,
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
404 DESC the decoded description of the headline.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
405
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
406 See `newsticker-download-images', and
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
407 `newsticker-download-enclosures' for sample functions.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
408
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
409 Please note that these functions are called only once for a
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
410 headline after it has been retrieved for the first time."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
411 :type 'hook
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
412 :options '(newsticker-download-images
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
413 newsticker-download-enclosures)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
414 :group 'newsticker-hooks)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
415
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
416 ;; ======================================================================
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
417 ;; miscellaneous
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
418 (defgroup newsticker-miscellaneous nil
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
419 "Miscellaneous newsticker settings."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
420 :group 'newsticker)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
421
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
422 (defcustom newsticker-cache-filename
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
423 "~/.newsticker-cache"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
424 "Name of the newsticker cache file."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
425 :type 'string
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
426 :group 'newsticker-miscellaneous)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
427
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
428 (defcustom newsticker-imagecache-dirname
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
429 "~/.newsticker-images"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
430 "Name of the directory where newsticker stores cached images."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
431 :type 'string
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
432 :group 'newsticker-miscellaneous)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
433
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
434 ;; debugging
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
435 (defcustom newsticker-debug
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
436 nil
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
437 "Enables some features needed for debugging newsticker.el.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
438
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
439 If set to t newsticker.el will print lots of debugging messages, and the
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
440 buffers *newsticker-wget-<feed>* will not be closed."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
441 :type 'boolean
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
442 :group 'newsticker-miscellaneous)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
443
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
444 ;; ======================================================================
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
445 ;;; Compatibility section, XEmacs, Emacs
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
446 ;; ======================================================================
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
447 (unless (fboundp 'time-add)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
448 (require 'time-date);;FIXME
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
449 (defun time-add (t1 t2)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
450 (seconds-to-time (+ (time-to-seconds t1) (time-to-seconds t2)))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
451
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
452 (unless (fboundp 'match-string-no-properties)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
453 (defalias 'match-string-no-properties 'match-string))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
454
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
455 (when (featurep 'xemacs)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
456 (unless (fboundp 'replace-regexp-in-string)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
457 (defun replace-regexp-in-string (re rp st)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
458 (save-match-data ;; apparently XEmacs needs save-match-data
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
459 (replace-in-string st re rp)))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
460
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
461 ;; copied from subr.el
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
462 (unless (fboundp 'add-to-invisibility-spec)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
463 (defun add-to-invisibility-spec (arg)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
464 "Add elements to `buffer-invisibility-spec'.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
465 See documentation for `buffer-invisibility-spec' for the kind of elements
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
466 that can be added."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
467 (if (eq buffer-invisibility-spec t)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
468 (setq buffer-invisibility-spec (list t)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
469 (setq buffer-invisibility-spec
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
470 (cons arg buffer-invisibility-spec))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
471
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
472 ;; copied from subr.el
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
473 (unless (fboundp 'remove-from-invisibility-spec)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
474 (defun remove-from-invisibility-spec (arg)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
475 "Remove elements from `buffer-invisibility-spec'."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
476 (if (consp buffer-invisibility-spec)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
477 (setq buffer-invisibility-spec
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
478 (delete arg buffer-invisibility-spec)))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
479
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
480 ;; ======================================================================
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
481 ;;; Internal variables
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
482 ;; ======================================================================
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
483 (defvar newsticker--item-list nil
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
484 "List of newsticker items.")
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
485 (defvar newsticker--item-position 0
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
486 "Actual position in list of newsticker items.")
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
487 (defvar newsticker--prev-message "There was no previous message yet!"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
488 "Last message that the newsticker displayed.")
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
489 (defvar newsticker--scrollable-text ""
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
490 "The text which is scrolled smoothly in the echo area.")
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
491 (defvar newsticker--buffer-uptodate-p nil
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
492 "Tells whether the newsticker buffer is up to date.")
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
493 (defvar newsticker--latest-update-time (current-time)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
494 "The time at which the latest news arrived.")
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
495 (defvar newsticker--process-ids nil
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
496 "List of PIDs of active newsticker processes.")
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
497
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
498 (defvar newsticker--cache nil "Cached newsticker data.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
499 This is a list of the form
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
500
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
501 ((label1
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
502 (title description link time age index preformatted-contents
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
503 preformatted-title extra-elements)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
504 ...)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
505 (label2
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
506 (title description link time age index preformatted-contents
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
507 preformatted-title extra-elements)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
508 ...)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
509 ...)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
510
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
511 where LABEL is a symbol. TITLE, DESCRIPTION, and LINK are
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
512 strings. TIME is a time value as returned by `current-time'.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
513 AGE is a symbol: 'new, 'old, 'immortal, and 'obsolete denote
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
514 ordinary news items, whereas 'feed denotes an item which is not a
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
515 headline but describes the feed itself. INDEX denotes the
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
516 original position of the item -- used for restoring the original
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
517 order. PREFORMATTED-CONTENTS and PREFORMATTED-TITLE hold the
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
518 formatted contents of the item's description and title. This
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
519 speeds things up if HTML rendering is used, which is rather
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
520 slow. EXTRA-ELEMENTS is an alist containing additional elements.")
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
521
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
522 (defvar newsticker--auto-narrow-to-feed nil
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
523 "Automatically narrow to current news feed.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
524 If non-nil only the items of the current news feed are visible.")
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
525
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
526 (defvar newsticker--auto-narrow-to-item nil
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
527 "Automatically narrow to current news item.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
528 If non-nil only the current headline is visible.")
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
529
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
530 (defconst newsticker--error-headline
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
531 "[COULD NOT DOWNLOAD HEADLINES!]"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
532 "Title of error headline which will be inserted if news retrieval fails.")
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
533
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
534 ;; ======================================================================
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
535 ;;; Shortcuts
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
536 ;; ======================================================================
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
537 (defsubst newsticker--title (item)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
538 "Return title of ITEM."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
539 (nth 0 item))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
540 (defsubst newsticker--desc (item)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
541 "Return description of ITEM."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
542 (nth 1 item))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
543 (defsubst newsticker--link (item)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
544 "Return link of ITEM."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
545 (nth 2 item))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
546 (defsubst newsticker--time (item)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
547 "Return time of ITEM."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
548 (nth 3 item))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
549 (defsubst newsticker--age (item)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
550 "Return age of ITEM."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
551 (nth 4 item))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
552 (defsubst newsticker--pos (item)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
553 "Return position/index of ITEM."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
554 (nth 5 item))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
555 (defsubst newsticker--preformatted-contents (item)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
556 "Return pre-formatted text of ITEM."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
557 (nth 6 item))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
558 (defsubst newsticker--preformatted-title (item)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
559 "Return pre-formatted title of ITEM."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
560 (nth 7 item))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
561 (defsubst newsticker--extra (item)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
562 "Return extra attributes of ITEM."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
563 (nth 8 item))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
564 (defsubst newsticker--guid-to-string (guid)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
565 "Return string representation of GUID."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
566 (if (stringp guid)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
567 guid
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
568 (car (xml-node-children guid))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
569 (defsubst newsticker--guid (item)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
570 "Return guid of ITEM."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
571 (newsticker--guid-to-string (assoc 'guid (newsticker--extra item))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
572 (defsubst newsticker--enclosure (item)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
573 "Return enclosure element of ITEM in the form \(...FIXME...\) or nil."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
574 (let ((enclosure (assoc 'enclosure (newsticker--extra item))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
575 (if enclosure
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
576 (xml-node-attributes enclosure))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
577 (defun newsticker--real-feed-name (feed)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
578 "Return real name of FEED."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
579 (catch 'name
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
580 (mapc (lambda (item)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
581 (if (eq (newsticker--age item) 'feed)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
582 (throw 'name (newsticker--title item))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
583 (cdr (newsticker--cache-get-feed feed)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
584 (symbol-name feed)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
585
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
586
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
587 ;; ======================================================================
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
588 ;;; User fun
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
589 ;; ======================================================================
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
590
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
591 (defun newsticker--start-feed (feed &optional do-not-complain-if-running)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
592 "Start retrieval timer for FEED.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
593 If timer is running already a warning message is printed unless
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
594 DO-NOT-COMPLAIN-IF-RUNNING is not nil. Add the started
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
595 name/timer pair to `newsticker--retrieval-timer-list'."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
596 (let* ((feed-name (car feed))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
597 (start-time (nth 2 feed))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
598 (interval (or (nth 3 feed)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
599 newsticker-retrieval-interval))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
600 (timer (assoc (car feed)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
601 newsticker--retrieval-timer-list)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
602 (if timer
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
603 (or do-not-complain-if-running
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
604 (message "Timer for %s is running already!"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
605 feed-name))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
606 (newsticker--debug-msg "Starting timer for %s: %s, %d"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
607 feed-name start-time interval)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
608 ;; do not repeat retrieval if interval not positive
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
609 (if (<= interval 0)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
610 (setq interval nil))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
611 ;; Suddenly XEmacs doesn't like start-time 0
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
612 (if (or (not start-time)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
613 (and (numberp start-time) (= start-time 0)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
614 (setq start-time 1))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
615 ;; (message "start-time %s" start-time)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
616 (setq timer (run-at-time start-time interval
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
617 'newsticker-get-news feed-name))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
618 (if interval
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
619 (add-to-list 'newsticker--retrieval-timer-list
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
620 (cons feed-name timer))))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
621
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
622 ;;;###autoload
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
623 (defun newsticker-start (&optional do-not-complain-if-running)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
624 "Start the newsticker.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
625 Start the timers for display and retrieval. If the newsticker, i.e. the
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
626 timers, are running already a warning message is printed unless
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
627 DO-NOT-COMPLAIN-IF-RUNNING is not nil.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
628 Run `newsticker-start-hook' if newsticker was not running already."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
629 (interactive)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
630 (let ((running (newsticker-running-p)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
631 ;; read old cache if it exists and newsticker is not running
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
632 (unless running
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
633 (let ((coding-system-for-read 'utf-8))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
634 (when (file-exists-p newsticker-cache-filename)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
635 (with-temp-buffer
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
636 (insert-file-contents newsticker-cache-filename)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
637 (goto-char (point-min))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
638 (condition-case nil
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
639 (setq newsticker--cache (read (current-buffer)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
640 (error
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
641 (message "Error while reading newsticker cache file!")
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
642 (setq newsticker--cache nil)))))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
643 ;; start retrieval timers -- one timer for each feed
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
644 (dolist (feed (append newsticker-url-list-defaults newsticker-url-list))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
645 (newsticker--start-feed feed))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
646 (unless running
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
647 (run-hooks 'newsticker-start-hook)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
648 (message "Newsticker started!"))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
649
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
650 (defun newsticker--stop-feed (feed-name)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
651 "Stop retrieval for feed FEED-NAME.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
652 Delete the stopped name/timer pair from `newsticker--retrieval-timer-list'."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
653 (let ((name-and-timer (assoc feed-name newsticker--retrieval-timer-list)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
654 (when name-and-timer
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
655 (cancel-timer (cdr name-and-timer))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
656 (setq newsticker--retrieval-timer-list
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
657 (delete name-and-timer newsticker--retrieval-timer-list)))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
658
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
659 (defun newsticker-stop ()
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
660 "Stop the newsticker and the newsticker-ticker.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
661 Cancel the timers for display and retrieval. Run `newsticker-stop-hook'
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
662 if newsticker has been running."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
663 (interactive)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
664 (newsticker--cache-update t)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
665 (when (fboundp 'newsticker-stop-ticker) ; silence compiler warnings
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
666 (newsticker-stop-ticker))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
667 (when (newsticker-running-p)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
668 (mapc (lambda (name-and-timer)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
669 (newsticker--stop-feed (car name-and-timer)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
670 newsticker--retrieval-timer-list)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
671 (setq newsticker--retrieval-timer-list nil)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
672 (run-hooks 'newsticker-stop-hook)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
673 (message "Newsticker stopped!")))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
674
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
675 (defun newsticker-get-all-news ()
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
676 "Launch retrieval of news from all configured newsticker sites.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
677 This does NOT start the retrieval timers."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
678 (interactive)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
679 ;; launch retrieval of news
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
680 (mapc (lambda (item)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
681 (newsticker-get-news (car item)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
682 (append newsticker-url-list-defaults newsticker-url-list)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
683
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
684 (defun newsticker-save-item (feed item)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
685 "Save FEED ITEM."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
686 (interactive)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
687 (let ((filename (read-string "Filename: "
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
688 (concat feed ":_"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
689 (replace-regexp-in-string
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
690 " " "_" (newsticker--title item))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
691 ".html"))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
692 (with-temp-buffer
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
693 (insert (newsticker--desc item))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
694 (write-file filename t))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
695
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
696 (defun newsticker-add-url (url name)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
697 "Add given URL under given NAME to `newsticker-url-list'.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
698 If URL is nil it is searched at point."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
699 (interactive
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
700 (list
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
701 (read-string "URL: "
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
702 (save-excursion
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
703 (end-of-line)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
704 (and
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
705 (re-search-backward
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
706 "http://"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
707 (if (> (point) (+ (point-min) 100))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
708 (- (point) 100)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
709 (point-min))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
710 t)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
711 (re-search-forward
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
712 "http://[-a-zA-Z0-9&/_.]*"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
713 (if (< (point) (- (point-max) 200))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
714 (+ (point) 200)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
715 (point-max))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
716 t)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
717 (buffer-substring-no-properties (match-beginning 0)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
718 (match-end 0)))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
719 (read-string "Name: ")))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
720 (add-to-list 'newsticker-url-list (list name url nil nil nil) t)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
721 (customize-variable 'newsticker-url-list))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
722
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
723 (defun newsticker-customize ()
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
724 "Open the newsticker customization group."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
725 (interactive)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
726 (customize-group "newsticker"))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
727
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
728 ;; ======================================================================
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
729 ;;; Local stuff
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
730 ;; ======================================================================
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
731 (defun newsticker--get-news-by-funcall (feed-name function)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
732 "Get news for the site FEED-NAME by calling FUNCTION.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
733 See `newsticker-get-news'."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
734 (let ((buffername (concat " *newsticker-funcall-" feed-name "*")))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
735 (save-excursion
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
736 (set-buffer (get-buffer-create buffername))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
737 (erase-buffer)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
738 (insert (string-to-multibyte (funcall function feed-name)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
739 (newsticker--sentinel-work nil t feed-name function
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
740 (current-buffer)))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
741
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
742 (defun newsticker--get-news-by-url (feed-name url)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
743 "Get news for the site FEED-NAME from address URL using `url-retrieve'.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
744 See `newsticker-get-news'."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
745 (let ((coding-system-for-read 'no-conversion))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
746 (url-retrieve url 'newsticker--get-news-by-url-callback (list feed-name)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
747 (force-mode-line-update))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
748
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
749 (defun newsticker--get-news-by-url-callback (status feed-name)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
750 "Callback function for `newsticker--get-news-by-url'.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
751 STATUS is the return status as delivered by `url-retrieve', and
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
752 FEED-NAME is the name of the feed that the news were retrieved
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
753 from."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
754 (let ((buf (get-buffer-create (concat " *newsticker-url-" feed-name "*")))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
755 (result (string-to-multibyte (buffer-string))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
756 (set-buffer buf)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
757 (erase-buffer)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
758 (insert result)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
759 ;; remove MIME header
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
760 (goto-char (point-min))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
761 (search-forward "\n\n")
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
762 (delete-region (point-min) (point))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
763 ;; read the rss/atom contents
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
764 (newsticker--sentinel-work nil t feed-name "url-retrieve" (current-buffer))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
765 (when status
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
766 (let ((status-type (car status))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
767 (status-details (cdr status)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
768 (cond ((eq status-type :redirect)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
769 ;; don't care about redirects
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
770 )
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
771 ((eq status-type :error)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
772 (message "%s: Error while retrieving news from %s: %s: \"%s\""
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
773 (format-time-string "%A, %H:%M" (current-time))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
774 feed-name
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
775 (car status-details) (cdr status-details))))))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
776
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
777 (defun newsticker--get-news-by-wget (feed-name url wget-arguments)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
778 "Get news for the site FEED-NAME from address URL using wget.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
779 WGET-ARGUMENTS is a list of arguments for wget.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
780 See `newsticker-get-news'."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
781 (let ((buffername (concat " *newsticker-wget-" feed-name "*")))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
782 (save-excursion
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
783 (set-buffer (get-buffer-create buffername))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
784 (erase-buffer)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
785 ;; throw an error if there is an old wget-process around
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
786 (if (get-process feed-name)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
787 (error "Another wget-process is running for %s" feed-name))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
788 ;; start wget
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
789 (let* ((args (append wget-arguments (list url)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
790 (proc (apply 'start-process feed-name buffername
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
791 newsticker-wget-name args)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
792 (set-process-coding-system proc 'no-conversion 'no-conversion)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
793 (set-process-sentinel proc 'newsticker--sentinel)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
794 (setq newsticker--process-ids (cons (process-id proc)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
795 newsticker--process-ids))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
796 (force-mode-line-update)))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
797
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
798 (defun newsticker-get-news (feed-name)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
799 "Get news from the site FEED-NAME and load feed logo.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
800 FEED-NAME must be a string which occurs as the label (i.e. the first element)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
801 in an element of `newsticker-url-list' or `newsticker-url-list-defaults'."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
802 (newsticker--debug-msg "%s: Getting news for %s"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
803 (format-time-string "%A, %H:%M" (current-time))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
804 feed-name)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
805 (let* ((item (or (assoc feed-name newsticker-url-list)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
806 (assoc feed-name newsticker-url-list-defaults)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
807 (error
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
808 "Cannot get news for %s: Check newsticker-url-list"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
809 feed-name)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
810 (url (cadr item))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
811 (wget-arguments (or (car (cdr (cdr (cdr (cdr item)))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
812 newsticker-wget-arguments)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
813 (if (functionp url)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
814 (newsticker--get-news-by-funcall feed-name url)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
815 (if (eq newsticker-retrieval-method 'intern)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
816 (newsticker--get-news-by-url feed-name url)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
817 (newsticker--get-news-by-wget feed-name url wget-arguments)))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
818
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
819 ;; ======================================================================
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
820 ;; Parsing
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
821 ;; ======================================================================
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
822
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
823 (defun newsticker--sentinel (process event)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
824 "Sentinel for extracting news titles from an RDF buffer.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
825 Argument PROCESS is the process which has just changed its state.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
826 Argument EVENT tells what has happened to the process."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
827 (let ((p-status (process-status process))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
828 (exit-status (process-exit-status process))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
829 (name (process-name process))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
830 (command (process-command process))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
831 (buffer (process-buffer process)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
832 (newsticker--sentinel-work event
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
833 (and (eq p-status 'exit)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
834 (= exit-status 0))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
835 name command buffer)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
836
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
837 (defun newsticker--sentinel-work (event status-ok name command buffer)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
838 "Actually do the sentinel work.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
839 Argument EVENT tells what has happened to the retrieval process.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
840 Argument STATUS-OK is the final status of the retrieval process,
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
841 non-nil meaning retrieval was successful.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
842 Argument NAME is the name of the retrieval process.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
843 Argument COMMAND is the command of the retrieval process.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
844 Argument BUFFER is the buffer of the retrieval process."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
845 (let ((time (current-time))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
846 (name-symbol (intern name))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
847 (something-was-added nil))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
848 ;; catch known errors (zombie processes, rubbish-xml etc.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
849 ;; if an error occurs the news feed is not updated!
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
850 (catch 'oops
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
851 (unless status-ok
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
852 (setq newsticker--cache
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
853 (newsticker--cache-add
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
854 newsticker--cache
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
855 name-symbol
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
856 newsticker--error-headline
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
857 (format
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
858 (concat "%s: Newsticker could not retrieve news from %s.\n"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
859 "Return status: `%s'\n"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
860 "Command was `%s'")
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
861 (format-time-string "%A, %H:%M" (current-time))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
862 name event command)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
863 ""
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
864 (current-time)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
865 'new
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
866 0 nil))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
867 (message "%s: Error while retrieving news from %s"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
868 (format-time-string "%A, %H:%M" (current-time))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
869 name)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
870 (throw 'oops nil))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
871 (let* ((coding-system 'utf-8)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
872 (node-list
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
873 (save-current-buffer
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
874 (set-buffer buffer)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
875 ;; a very very dirty workaround to overcome the
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
876 ;; problems with the newest (20030621) xml.el:
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
877 ;; remove all unnecessary whitespace
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
878 (goto-char (point-min))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
879 (while (re-search-forward ">[ \t\r\n]+<" nil t)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
880 (replace-match "><" nil t))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
881 ;; and another brutal workaround (20031105)! For some
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
882 ;; reason the xml parser does not like the colon in the
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
883 ;; doctype name "rdf:RDF"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
884 (goto-char (point-min))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
885 (if (re-search-forward "<!DOCTYPE[ \t\n]+rdf:RDF" nil t)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
886 (replace-match "<!DOCTYPE rdfColonRDF" nil t))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
887 ;; finally.... ~##^°!!!!!
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
888 (goto-char (point-min))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
889 (while (search-forward "\r\n" nil t)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
890 (replace-match "\n" nil t))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
891 ;; still more brutal workarounds (20040309)! The xml
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
892 ;; parser does not like doctype rss
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
893 (goto-char (point-min))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
894 (if (re-search-forward "<!DOCTYPE[ \t\n]+rss[ \t\n]*>" nil t)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
895 (replace-match "" nil t))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
896 ;; And another one (20050618)! (Fixed in GNU Emacs 22.0.50.18)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
897 ;; Remove comments to avoid this xml-parsing bug:
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
898 ;; "XML files can have only one toplevel tag"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
899 (goto-char (point-min))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
900 (while (search-forward "<!--" nil t)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
901 (let ((start (match-beginning 0)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
902 (unless (search-forward "-->" nil t)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
903 (error "Can't find end of comment"))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
904 (delete-region start (point))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
905 ;; And another one (20050702)! If description is HTML
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
906 ;; encoded and starts with a `<', wrap the whole
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
907 ;; description in a CDATA expression. This happened for
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
908 ;; http://www.thefreedictionary.com/_/WoD/rss.aspx?type=quote
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
909 (goto-char (point-min))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
910 (while (re-search-forward
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
911 "<description>\\(<img.*?\\)</description>" nil t)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
912 (replace-match
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
913 "<description><![CDATA[ \\1 ]]></description>"))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
914 ;; And another one (20051123)! XML parser does not
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
915 ;; like this: <yweather:location city="Frankfurt/Main"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
916 ;; region="" country="GM" />
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
917 ;; try to "fix" empty attributes
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
918 ;; This happened for
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
919 ;; http://xml.weather.yahoo.com/forecastrss?p=GMXX0040&u=f
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
920 (goto-char (point-min))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
921 (while (re-search-forward "\\(<[^>]*\\)=\"\"" nil t)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
922 (replace-match "\\1=\" \""))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
923 ;;
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
924 (set-buffer-modified-p nil)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
925 ;; check coding system
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
926 (goto-char (point-min))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
927 (if (re-search-forward "encoding=\"\\([^\"]+\\)\""
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
928 nil t)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
929 (setq coding-system (intern (downcase (match-string 1))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
930 (setq coding-system
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
931 (condition-case nil
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
932 (check-coding-system coding-system)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
933 (coding-system-error
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
934 (message
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
935 "newsticker.el: ignoring coding system %s for %s"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
936 coding-system name)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
937 nil))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
938 ;; Decode if possible
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
939 (when coding-system
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
940 (decode-coding-region (point-min) (point-max)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
941 coding-system))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
942 (condition-case errordata
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
943 ;; The xml parser might fail
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
944 ;; or the xml might be bugged
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
945 (xml-parse-region (point-min) (point-max))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
946 (error (message "Could not parse %s: %s"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
947 (buffer-name) (cadr errordata))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
948 (throw 'oops nil)))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
949 (topnode (car node-list))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
950 (channelnode (car (xml-get-children topnode 'channel)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
951 (imageurl nil))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
952 ;; mark all items as obsolete
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
953 (newsticker--cache-replace-age newsticker--cache
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
954 name-symbol
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
955 'new 'obsolete-new)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
956 (newsticker--cache-replace-age newsticker--cache
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
957 name-symbol
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
958 'old 'obsolete-old)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
959 (newsticker--cache-replace-age newsticker--cache
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
960 name-symbol
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
961 'feed 'obsolete-old)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
962
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
963 ;; check Atom/RSS version and call corresponding parser
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
964 (condition-case error-data
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
965 (if (cond
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
966 ;; RSS 0.91
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
967 ((and (eq 'rss (xml-node-name topnode))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
968 (string= "0.91" (xml-get-attribute topnode 'version)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
969 (setq imageurl (newsticker--get-logo-url-rss-0.91 topnode))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
970 (newsticker--parse-rss-0.91 name time topnode))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
971 ;; RSS 0.92
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
972 ((and (eq 'rss (xml-node-name topnode))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
973 (string= "0.92" (xml-get-attribute topnode 'version)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
974 (setq imageurl (newsticker--get-logo-url-rss-0.92 topnode))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
975 (newsticker--parse-rss-0.92 name time topnode))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
976 ;; RSS 1.0
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
977 ((eq 'rdf:RDF (xml-node-name topnode))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
978 (setq imageurl (newsticker--get-logo-url-rss-1.0 topnode))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
979 (newsticker--parse-rss-1.0 name time topnode))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
980 ;; RSS 2.0
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
981 ((and (eq 'rss (xml-node-name topnode))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
982 (string= "2.0" (xml-get-attribute topnode 'version)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
983 (setq imageurl (newsticker--get-logo-url-rss-2.0 topnode))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
984 (newsticker--parse-rss-2.0 name time topnode))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
985 ;; Atom 0.3
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
986 ((and (eq 'feed (xml-node-name topnode))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
987 (string= "http://purl.org/atom/ns#"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
988 (xml-get-attribute topnode 'xmlns)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
989 (setq imageurl (newsticker--get-logo-url-atom-0.3 topnode))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
990 (newsticker--parse-atom-0.3 name time topnode))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
991 ;; Atom 1.0
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
992 ((and (eq 'feed (xml-node-name topnode))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
993 (string= "http://www.w3.org/2005/Atom"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
994 (xml-get-attribute topnode 'xmlns)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
995 (setq imageurl (newsticker--get-logo-url-atom-1.0 topnode))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
996 (newsticker--parse-atom-1.0 name time topnode))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
997 ;; unknown feed type
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
998 (t
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
999 (newsticker--debug-msg "Feed type unknown: %s: %s"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1000 (xml-node-name topnode) name)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1001 nil))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1002 (setq something-was-added t))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1003 (xerror (message "sentinelerror in %s: %s" name error-data)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1004
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1005 ;; Remove those old items from cache which have been removed from
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1006 ;; the feed
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1007 (newsticker--cache-replace-age newsticker--cache
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1008 name-symbol 'obsolete-old 'deleteme)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1009 (newsticker--cache-remove newsticker--cache name-symbol
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1010 'deleteme)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1011 ;; Remove those new items from cache which have been removed from
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1012 ;; the feed. Or keep them as `obsolete'
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1013 (if (not newsticker-keep-obsolete-items)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1014 (newsticker--cache-remove newsticker--cache
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1015 name-symbol 'obsolete-new)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1016 (setq newsticker--cache
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1017 (newsticker--cache-mark-expired
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1018 newsticker--cache name-symbol 'obsolete 'obsolete-expired
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1019 newsticker-obsolete-item-max-age))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1020 (newsticker--cache-remove newsticker--cache
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1021 name-symbol 'obsolete-expired)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1022 (newsticker--cache-replace-age newsticker--cache
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1023 name-symbol 'obsolete-new
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1024 'obsolete))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1025 (newsticker--update-process-ids)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1026 ;; setup scrollable text
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1027 (when (= 0 (length newsticker--process-ids))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1028 (when (fboundp 'newsticker--ticker-text-setup) ;silence
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1029 ;compiler
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1030 ;warnings
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1031 (newsticker--ticker-text-setup)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1032 (setq newsticker--latest-update-time (current-time))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1033 (when something-was-added
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1034 ;; FIXME: should we care about removed items as well?
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1035 (newsticker--cache-update)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1036 (when (fboundp 'newsticker--buffer-set-uptodate) ;silence
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1037 ;compiler
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1038 ;warnings
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1039 (newsticker--buffer-set-uptodate nil)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1040 ;; kill the process buffer if wanted
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1041 (unless newsticker-debug
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1042 (kill-buffer buffer))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1043 ;; launch retrieval of image
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1044 (when (and imageurl newsticker--download-logos)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1045 (newsticker--image-get name imageurl)))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1046 (when newsticker--sentinel-callback
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1047 (funcall newsticker--sentinel-callback)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1048
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1049 (defun newsticker--get-logo-url-atom-1.0 (node)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1050 "Return logo URL from atom 1.0 data in NODE."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1051 (car (xml-node-children
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1052 (car (xml-get-children node 'logo)))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1053
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1054 (defun newsticker--get-logo-url-atom-0.3 (node)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1055 "Return logo URL from atom 0.3 data in NODE."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1056 (car (xml-node-children
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1057 (car (xml-get-children (car (xml-get-children node 'image)) 'url)))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1058
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1059 (defun newsticker--get-logo-url-rss-2.0 (node)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1060 "Return logo URL from RSS 2.0 data in NODE."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1061 (car (xml-node-children
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1062 (car (xml-get-children
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1063 (car (xml-get-children
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1064 (car (xml-get-children node 'channel)) 'image)) 'url)))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1065
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1066 (defun newsticker--get-logo-url-rss-1.0 (node)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1067 "Return logo URL from RSS 1.0 data in NODE."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1068 (car (xml-node-children
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1069 (car (xml-get-children (car (xml-get-children node 'image)) 'url)))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1070
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1071 (defun newsticker--get-logo-url-rss-0.92 (node)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1072 "Return logo URL from RSS 0.92 data in NODE."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1073 (car (xml-node-children
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1074 (car (xml-get-children (car (xml-get-children node 'image)) 'url)))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1075
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1076 (defun newsticker--get-logo-url-rss-0.91 (node)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1077 "Return logo URL from RSS 0.91 data in NODE."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1078 (car (xml-node-children
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1079 (car (xml-get-children (car (xml-get-children node 'image)) 'url)))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1080
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1081 (defun newsticker--parse-atom-0.3 (name time topnode)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1082 "Parse Atom 0.3 data.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1083 Return value as well as arguments NAME, TIME, and TOPNODE are the
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1084 same as in `newsticker--parse-atom-1.0'."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1085 (newsticker--debug-msg "Parsing Atom 0.3 feed %s" name)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1086 (let (new-feed new-item)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1087 (setq new-feed (newsticker--parse-generic-feed
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1088 name time
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1089 ;; title
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1090 (car (xml-node-children
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1091 (car (xml-get-children topnode 'title))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1092 ;; desc
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1093 (car (xml-node-children
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1094 (car (xml-get-children topnode 'content))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1095 ;; link
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1096 (xml-get-attribute
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1097 (car (xml-get-children topnode 'link)) 'href)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1098 ;; extra-elements
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1099 (xml-node-children topnode)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1100 (setq new-item (newsticker--parse-generic-items
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1101 name time (xml-get-children topnode 'entry)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1102 ;; title-fn
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1103 (lambda (node)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1104 (car (xml-node-children
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1105 (car (xml-get-children node 'title)))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1106 ;; desc-fn
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1107 (lambda (node)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1108 (or (car (xml-node-children
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1109 (car (xml-get-children node 'content))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1110 (car (xml-node-children
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1111 (car (xml-get-children node 'summary))))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1112 ;; link-fn
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1113 (lambda (node)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1114 (xml-get-attribute
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1115 (car (xml-get-children node 'link)) 'href))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1116 ;; time-fn
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1117 (lambda (node)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1118 (newsticker--decode-rfc822-date
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1119 (car (xml-node-children
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1120 (car (xml-get-children node 'modified))))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1121 ;; guid-fn
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1122 (lambda (node)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1123 (newsticker--guid-to-string
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1124 (assoc 'guid (xml-node-children node))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1125 ;; extra-fn
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1126 (lambda (node)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1127 (xml-node-children node))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1128 (or new-item new-feed)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1129
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1130 (defun newsticker--parse-atom-1.0 (name time topnode)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1131 "Parse Atom 1.0 data.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1132 Argument NAME gives the name of a news feed. TIME gives the
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1133 system time at which the data have been retrieved. TOPNODE
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1134 contains the feed data as returned by the xml parser.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1135
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1136 For the Atom 1.0 specification see
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1137 http://www.atompub.org/2005/08/17/draft-ietf-atompub-format-11.html"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1138 (newsticker--debug-msg "Parsing Atom 1.0 feed %s" name)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1139 (let (new-feed new-item)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1140 (setq new-feed (newsticker--parse-generic-feed
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1141 name time
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1142 ;; title
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1143 (car (xml-node-children
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1144 (car (xml-get-children topnode 'title))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1145 ;; desc
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1146 (car (xml-node-children
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1147 (car (xml-get-children topnode 'subtitle))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1148 ;; link
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1149 (lambda (node)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1150 (xml-get-attribute
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1151 (car (xml-get-children node 'link)) 'href))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1152 ;; extra-elements
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1153 (xml-node-children topnode)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1154 (setq new-item (newsticker--parse-generic-items
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1155 name time (xml-get-children topnode 'entry)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1156 ;; title-fn
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1157 (lambda (node)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1158 (car (xml-node-children
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1159 (car (xml-get-children node 'title)))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1160 ;; desc-fn
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1161 (lambda (node)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1162 (or (car (xml-node-children
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1163 (car (xml-get-children node 'content))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1164 (car (xml-node-children
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1165 (car (xml-get-children node 'summary))))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1166 ;; link-fn
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1167 (lambda (node)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1168 (xml-get-attribute
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1169 (car (xml-get-children node 'link)) 'href))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1170 ;; time-fn
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1171 (lambda (node)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1172 (newsticker--decode-iso8601-date
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1173 (or (car (xml-node-children
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1174 (car (xml-get-children node 'updated))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1175 (car (xml-node-children
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1176 (car (xml-get-children node 'published)))))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1177 ;; guid-fn
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1178 (lambda (node)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1179 (car (xml-node-children
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1180 (car (xml-get-children node 'id)))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1181 ;; extra-fn
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1182 (lambda (node)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1183 (xml-node-children node))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1184 (or new-item new-feed)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1185
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1186 (defun newsticker--parse-rss-0.91 (name time topnode)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1187 "Parse RSS 0.91 data.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1188 Return value as well as arguments NAME, TIME, and TOPNODE are the
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1189 same as in `newsticker--parse-atom-1.0'.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1190
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1191 For the RSS 0.91 specification see http://backend.userland.com/rss091 or
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1192 http://my.netscape.com/publish/formats/rss-spec-0.91.html."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1193 (newsticker--debug-msg "Parsing RSS 0.91 feed %s" name)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1194 (let* ((channelnode (car (xml-get-children topnode 'channel)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1195 (pub-date (newsticker--decode-rfc822-date
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1196 (car (xml-node-children
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1197 (car (xml-get-children channelnode 'pubDate))))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1198 is-new-feed has-new-items)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1199 (setq is-new-feed (newsticker--parse-generic-feed
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1200 name time
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1201 ;; title
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1202 (car (xml-node-children
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1203 (car (xml-get-children channelnode 'title))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1204 ;; desc
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1205 (car (xml-node-children
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1206 (car (xml-get-children channelnode
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1207 'description))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1208 ;; link
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1209 (car (xml-node-children
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1210 (car (xml-get-children channelnode 'link))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1211 ;; extra-elements
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1212 (xml-node-children channelnode)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1213 (setq has-new-items (newsticker--parse-generic-items
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1214 name time (xml-get-children channelnode 'item)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1215 ;; title-fn
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1216 (lambda (node)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1217 (car (xml-node-children
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1218 (car (xml-get-children node 'title)))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1219 ;; desc-fn
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1220 (lambda (node)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1221 (car (xml-node-children
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1222 (car (xml-get-children node 'description)))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1223 ;; link-fn
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1224 (lambda (node)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1225 (car (xml-node-children
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1226 (car (xml-get-children node 'link)))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1227 ;; time-fn
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1228 (lambda (node)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1229 (newsticker--decode-rfc822-date
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1230 (car (xml-node-children
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1231 (car (xml-get-children node 'pubDate))))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1232 ;; guid-fn
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1233 (lambda (node)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1234 nil)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1235 ;; extra-fn
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1236 (lambda (node)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1237 (xml-node-children node))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1238 (or has-new-items is-new-feed)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1239
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1240 (defun newsticker--parse-rss-0.92 (name time topnode)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1241 "Parse RSS 0.92 data.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1242 Return value as well as arguments NAME, TIME, and TOPNODE are the
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1243 same as in `newsticker--parse-atom-1.0'.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1244
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1245 For the RSS 0.92 specification see http://backend.userland.com/rss092."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1246 (newsticker--debug-msg "Parsing RSS 0.92 feed %s" name)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1247 (let* ((channelnode (car (xml-get-children topnode 'channel)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1248 (pub-date (newsticker--decode-rfc822-date
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1249 (car (xml-node-children
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1250 (car (xml-get-children channelnode 'pubDate))))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1251 is-new-feed has-new-items)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1252 (setq is-new-feed (newsticker--parse-generic-feed
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1253 name time
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1254 ;; title
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1255 (car (xml-node-children
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1256 (car (xml-get-children channelnode 'title))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1257 ;; desc
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1258 (car (xml-node-children
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1259 (car (xml-get-children channelnode
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1260 'description))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1261 ;; link
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1262 (car (xml-node-children
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1263 (car (xml-get-children channelnode 'link))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1264 ;; extra-elements
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1265 (xml-node-children channelnode)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1266 (setq has-new-items (newsticker--parse-generic-items
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1267 name time (xml-get-children channelnode 'item)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1268 ;; title-fn
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1269 (lambda (node)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1270 (car (xml-node-children
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1271 (car (xml-get-children node 'title)))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1272 ;; desc-fn
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1273 (lambda (node)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1274 (car (xml-node-children
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1275 (car (xml-get-children node 'description)))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1276 ;; link-fn
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1277 (lambda (node)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1278 (car (xml-node-children
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1279 (car (xml-get-children node 'link)))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1280 ;; time-fn
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1281 (lambda (node)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1282 (newsticker--decode-rfc822-date
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1283 (car (xml-node-children
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1284 (car (xml-get-children node 'pubDate))))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1285 ;; guid-fn
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1286 (lambda (node)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1287 nil)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1288 ;; extra-fn
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1289 (lambda (node)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1290 (xml-node-children node))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1291 (or has-new-items is-new-feed)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1292
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1293 (defun newsticker--parse-rss-1.0 (name time topnode)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1294 "Parse RSS 1.0 data.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1295 Return value as well as arguments NAME, TIME, and TOPNODE are the
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1296 same as in `newsticker--parse-atom-1.0'.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1297
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1298 For the RSS 1.0 specification see http://web.resource.org/rss/1.0/spec."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1299 (newsticker--debug-msg "Parsing RSS 1.0 feed %s" name)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1300 (let* ((channelnode (car (xml-get-children topnode 'channel)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1301 is-new-feed has-new-items)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1302 (setq is-new-feed (newsticker--parse-generic-feed
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1303 name time
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1304 ;; title
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1305 (car (xml-node-children
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1306 (car (xml-get-children channelnode 'title))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1307 ;; desc
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1308 (car (xml-node-children
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1309 (car (xml-get-children channelnode
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1310 'description))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1311 ;; link
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1312 (car (xml-node-children
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1313 (car (xml-get-children channelnode 'link))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1314 ;; extra-elements
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1315 (xml-node-children channelnode)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1316 (setq has-new-items (newsticker--parse-generic-items
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1317 name time (xml-get-children topnode 'item)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1318 ;; title-fn
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1319 (lambda (node)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1320 (car (xml-node-children
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1321 (car (xml-get-children node 'title)))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1322 ;; desc-fn
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1323 (lambda (node)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1324 (car (xml-node-children
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1325 (car (xml-get-children node
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1326 'description)))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1327 ;; link-fn
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1328 (lambda (node)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1329 (car (xml-node-children
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1330 (car (xml-get-children node 'link)))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1331 ;; time-fn
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1332 (lambda (node)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1333 (newsticker--decode-iso8601-date
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1334 (car (xml-node-children
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1335 (car (xml-get-children node 'dc:date))))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1336 ;; guid-fn
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1337 (lambda (node)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1338 nil)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1339 ;; extra-fn
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1340 (lambda (node)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1341 (xml-node-children node))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1342 (or has-new-items is-new-feed)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1343
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1344 (defun newsticker--parse-rss-2.0 (name time topnode)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1345 "Parse RSS 2.0 data.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1346 Return value as well as arguments NAME, TIME, and TOPNODE are the
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1347 same as in `newsticker--parse-atom-1.0'.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1348
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1349 For the RSS 2.0 specification see http://blogs.law.harvard.edu/tech/rss."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1350 (newsticker--debug-msg "Parsing RSS 2.0 feed %s" name)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1351 (let* ((channelnode (car (xml-get-children topnode 'channel)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1352 is-new-feed has-new-items)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1353 (setq is-new-feed (newsticker--parse-generic-feed
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1354 name time
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1355 ;; title
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1356 (car (xml-node-children
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1357 (car (xml-get-children channelnode 'title))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1358 ;; desc
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1359 (car (xml-node-children
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1360 (car (xml-get-children channelnode
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1361 'description))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1362 ;; link
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1363 (car (xml-node-children
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1364 (car (xml-get-children channelnode 'link))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1365 ;; extra-elements
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1366 (xml-node-children channelnode)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1367 (setq has-new-items (newsticker--parse-generic-items
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1368 name time (xml-get-children channelnode 'item)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1369 ;; title-fn
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1370 (lambda (node)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1371 (car (xml-node-children
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1372 (car (xml-get-children node 'title)))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1373 ;; desc-fn
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1374 (lambda (node)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1375 (or (car (xml-node-children
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1376 (car (xml-get-children node
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1377 'content:encoded))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1378 (car (xml-node-children
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1379 (car (xml-get-children node
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1380 'description))))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1381 ;; link-fn
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1382 (lambda (node)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1383 (car (xml-node-children
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1384 (car (xml-get-children node 'link)))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1385 ;; time-fn
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1386 (lambda (node)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1387 (newsticker--decode-rfc822-date
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1388 (car (xml-node-children
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1389 (car (xml-get-children node 'pubDate))))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1390 ;; guid-fn
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1391 (lambda (node)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1392 (newsticker--guid-to-string
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1393 (assoc 'guid (xml-node-children node))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1394 ;; extra-fn
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1395 (lambda (node)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1396 (xml-node-children node))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1397 (or has-new-items is-new-feed)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1398
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1399 (defun newsticker--parse-generic-feed (name time title desc link
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1400 extra-elements)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1401 "Parse generic news feed data.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1402 Argument NAME gives the name of a news feed. TIME gives the
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1403 system time at which the data have been retrieved.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1404
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1405 The arguments TITLE, DESC, LINK, and EXTRA-ELEMENTS give the feed's title,
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1406 description, link, and extra elements resp."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1407 (let ((title (or title "[untitled]"))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1408 (link (or link ""))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1409 (old-item nil)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1410 (position 0)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1411 (something-was-added nil))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1412 ;; decode numeric entities
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1413 (setq title (newsticker--decode-numeric-entities title))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1414 (setq desc (newsticker--decode-numeric-entities desc))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1415 (setq link (newsticker--decode-numeric-entities link))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1416 ;; remove whitespace from title, desc, and link
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1417 (setq title (newsticker--remove-whitespace title))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1418 (setq desc (newsticker--remove-whitespace desc))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1419 (setq link (newsticker--remove-whitespace link))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1420
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1421 ;; handle the feed itself
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1422 (unless (newsticker--cache-contains newsticker--cache
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1423 (intern name) title
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1424 desc link 'feed)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1425 (setq something-was-added t))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1426 (setq newsticker--cache
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1427 (newsticker--cache-add newsticker--cache (intern name)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1428 title desc link time 'feed position
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1429 extra-elements time 'feed))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1430 something-was-added))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1431
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1432 (defun newsticker--parse-generic-items (name time itemlist
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1433 title-fn desc-fn
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1434 link-fn time-fn
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1435 guid-fn extra-fn)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1436 "Parse generic news feed data.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1437 Argument NAME gives the name of a news feed. TIME gives the
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1438 system time at which the data have been retrieved. ITEMLIST
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1439 contains the news items returned by the xml parser.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1440
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1441 The arguments TITLE-FN, DESC-FN, LINK-FN, TIME-FN, GUID-FN, and
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1442 EXTRA-FN give functions for extracting title, description, link,
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1443 time, guid, and extra-elements resp. They are called with one
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1444 argument, which is one of the items in ITEMLIST."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1445 (let (title desc link
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1446 (old-item nil)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1447 (position 0)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1448 (something-was-added nil))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1449 ;; gather all items for this feed
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1450 (mapc (lambda (node)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1451 (setq position (1+ position))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1452 (setq title (or (funcall title-fn node) "[untitled]"))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1453 (setq desc (funcall desc-fn node))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1454 (setq link (or (funcall link-fn node) ""))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1455 (setq time (or (funcall time-fn node) time))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1456 ;; It happened that the title or description
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1457 ;; contained evil HTML code that confused the
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1458 ;; xml parser. Therefore:
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1459 (unless (stringp title)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1460 (setq title (prin1-to-string title)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1461 (unless (or (stringp desc) (not desc))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1462 (setq desc (prin1-to-string desc)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1463 ;; ignore items with empty title AND empty desc
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1464 (when (or (> (length title) 0)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1465 (> (length desc) 0))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1466 ;; decode numeric entities
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1467 (setq title (newsticker--decode-numeric-entities title))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1468 (when desc
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1469 (setq desc (newsticker--decode-numeric-entities desc)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1470 (setq link (newsticker--decode-numeric-entities link))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1471 ;; remove whitespace from title, desc, and link
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1472 (setq title (newsticker--remove-whitespace title))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1473 (setq desc (newsticker--remove-whitespace desc))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1474 (setq link (newsticker--remove-whitespace link))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1475 ;; add data to cache
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1476 ;; do we have this item already?
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1477 (let* ((guid (funcall guid-fn node)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1478 ;;(message "guid=%s" guid)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1479 (setq old-item
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1480 (newsticker--cache-contains newsticker--cache
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1481 (intern name) title
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1482 desc link nil guid)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1483 ;; add this item, or mark it as old, or do nothing
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1484 (let ((age1 'new)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1485 (age2 'old)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1486 (item-new-p nil))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1487 (if old-item
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1488 (let ((prev-age (newsticker--age old-item)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1489 (unless newsticker-automatically-mark-items-as-old
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1490 ;; Some feeds deliver items multiply, the
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1491 ;; first time we find an 'obsolete-old one the
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1492 ;; cache, the following times we find an 'old
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1493 ;; one
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1494 (if (memq prev-age '(obsolete-old old))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1495 (setq age2 'old)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1496 (setq age2 'new)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1497 (if (eq prev-age 'immortal)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1498 (setq age2 'immortal))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1499 (setq time (newsticker--time old-item)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1500 ;; item was not there
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1501 (setq item-new-p t)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1502 (setq something-was-added t))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1503 (setq newsticker--cache
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1504 (newsticker--cache-add
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1505 newsticker--cache (intern name) title desc link
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1506 time age1 position (funcall extra-fn node)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1507 time age2))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1508 (when item-new-p
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1509 (let ((item (newsticker--cache-contains
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1510 newsticker--cache (intern name) title
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1511 desc link nil)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1512 (if newsticker-auto-mark-filter-list
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1513 (newsticker--run-auto-mark-filter name item))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1514 (run-hook-with-args
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1515 'newsticker-new-item-functions name item))))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1516 itemlist)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1517 something-was-added))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1518
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1519 ;; ======================================================================
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1520 ;;; Misc
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1521 ;; ======================================================================
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1522 (defun newsticker--decode-numeric-entities (string)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1523 "Decode SGML numeric entities by their respective utf characters.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1524 This function replaces numeric entities in the input STRING and
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1525 returns the modified string. For example \"&#42;\" gets replaced
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1526 by \"*\"."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1527 (if (and string (stringp string))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1528 (let ((start 0))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1529 (while (string-match "&#\\([0-9]+\\);" string start)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1530 (condition-case nil
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1531 (setq string (replace-match
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1532 (string (read (substring string
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1533 (match-beginning 1)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1534 (match-end 1))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1535 nil nil string))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1536 (error nil))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1537 (setq start (1+ (match-beginning 0))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1538 string)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1539 nil))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1540
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1541 (defun newsticker--remove-whitespace (string)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1542 "Remove leading and trailing whitespace from STRING."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1543 ;; we must have ...+ but not ...* in the regexps otherwise xemacs loops
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1544 ;; endlessly...
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1545 (when (and string (stringp string))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1546 (replace-regexp-in-string
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1547 "[ \t\r\n]+$" ""
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1548 (replace-regexp-in-string "^[ \t\r\n]+" "" string))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1549
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1550 (defun newsticker--do-forget-preformatted (item)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1551 "Forget pre-formatted data for ITEM.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1552 Remove the pre-formatted from `newsticker--cache'."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1553 (if (nthcdr 7 item)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1554 (setcar (nthcdr 7 item) nil))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1555 (if (nthcdr 6 item)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1556 (setcar (nthcdr 6 item) nil)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1557
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1558 (defun newsticker--forget-preformatted ()
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1559 "Forget all cached pre-formatted data.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1560 Remove the pre-formatted from `newsticker--cache'."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1561 (mapc (lambda (feed)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1562 (mapc 'newsticker--do-forget-preformatted
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1563 (cdr feed)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1564 newsticker--cache)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1565 (when (fboundp 'newsticker--buffer-set-uptodate)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1566 (newsticker--buffer-set-uptodate nil)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1567
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1568 (defun newsticker--debug-msg (string &rest args)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1569 "Print newsticker debug messages.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1570 This function calls `message' with arguments STRING and ARGS, if
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1571 `newsticker-debug' is non-nil."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1572 (and newsticker-debug
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1573 ;;(not (active-minibuffer-window))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1574 ;;(not (current-message))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1575 (apply 'message string args)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1576
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1577 (defun newsticker--decode-iso8601-date (iso8601-string)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1578 "Return ISO8601-STRING in format like `decode-time'.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1579 Converts from ISO-8601 to Emacs representation.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1580 Examples:
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1581 2004-09-17T05:09:49.001+00:00
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1582 2004-09-17T05:09:49+00:00
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1583 2004-09-17T05:09+00:00
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1584 2004-09-17T05:09:49
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1585 2004-09-17T05:09
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1586 2004-09-17
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1587 2004-09
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1588 2004"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1589 (if iso8601-string
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1590 (when (string-match
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1591 (concat
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1592 "^ *\\([0-9]\\{4\\}\\)" ;year
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1593 "\\(-\\([0-9]\\{2\\}\\)" ;month
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1594 "\\(-\\([0-9]\\{2\\}\\)" ;day
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1595 "\\(T"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1596 "\\([0-9]\\{2\\}\\):\\([0-9]\\{2\\}\\)" ;hour:minute
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1597 "\\(:\\([0-9]\\{2\\}\\)\\(\\.[0-9]+\\)?\\)?" ;second
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1598 ;timezone
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1599 "\\(\\([-+Z]\\)\\(\\([0-9]\\{2\\}\\):\\([0-9]\\{2\\}\\)\\)?\\)?"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1600 "\\)?\\)?\\)? *$")
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1601 iso8601-string)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1602 (let ((year (read (match-string 1 iso8601-string)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1603 (month (read (or (match-string 3 iso8601-string)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1604 "1")))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1605 (day (read (or (match-string 5 iso8601-string)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1606 "1")))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1607 (hour (read (or (match-string 7 iso8601-string)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1608 "0")))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1609 (minute (read (or (match-string 8 iso8601-string)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1610 "0")))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1611 (second (read (or (match-string 10 iso8601-string)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1612 "0")))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1613 (sign (match-string 13 iso8601-string))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1614 (offset-hour (read (or (match-string 15 iso8601-string)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1615 "0")))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1616 (offset-minute (read (or (match-string 16 iso8601-string)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1617 "0"))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1618 (cond ((string= sign "+")
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1619 (setq hour (- hour offset-hour))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1620 (setq minute (- minute offset-minute)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1621 ((string= sign "-")
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1622 (setq hour (+ hour offset-hour))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1623 (setq minute (+ minute offset-minute))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1624 ;; if UTC subtract current-time-zone offset
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1625 ;;(setq second (+ (car (current-time-zone)) second)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1626
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1627 (condition-case nil
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1628 (encode-time second minute hour day month year t)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1629 (error
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1630 (message "Cannot decode \"%s\"" iso8601-string)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1631 nil))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1632 nil))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1633
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1634 (defun newsticker--decode-rfc822-date (rfc822-string)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1635 "Return RFC822-STRING in format like `decode-time'.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1636 Converts from RFC822 to Emacs representation.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1637 Examples:
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1638 Sat, 07 September 2002 00:00:01 +0100
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1639 Sat, 07 September 2002 00:00:01 MET
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1640 Sat, 07 Sep 2002 00:00:01 GMT
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1641 07 Sep 2002 00:00:01 GMT
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1642 07 Sep 2002"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1643 (if (and rfc822-string (stringp rfc822-string))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1644 (when (string-match
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1645 (concat
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1646 "\\s-*"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1647 ;; week day
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1648 "\\(\\(Mon\\|Tue\\|Wed\\|Thu\\|Fri\\|Sat\\|Sun\\)\\s-*,?\\)?\\s-*"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1649 ;; day
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1650 "\\([0-9]\\{1,2\\}\\)\\s-+"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1651 ;; month
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1652 "\\(Jan\\|Feb\\|Mar\\|Apr\\|May\\|Jun\\|"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1653 "Jul\\|Aug\\|Sep\\|Oct\\|Nov\\|Dec\\).*?\\s-+"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1654 ;; year
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1655 "\\([0-9]\\{2,4\\}\\)"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1656 ;; time may be missing
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1657 "\\(\\s-+"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1658 ;; hour
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1659 "\\([0-9]\\{2\\}\\)"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1660 ;; minute
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1661 ":\\([0-9]\\{2\\}\\)"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1662 ;; second
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1663 "\\(:\\([0-9]\\{2\\}\\)\\)?"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1664 ;; zone -- fixme
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1665 "\\(\\s-+\\("
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1666 "UT\\|GMT\\|EST\\|EDT\\|CST\\|CDT\\|MST\\|MDT\\|PST\\|PDT"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1667 "\\|\\([-+]\\)\\([0-9]\\{2\\}\\)\\([0-9]\\{2\\}\\)"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1668 "\\)\\)?"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1669 "\\)?")
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1670 rfc822-string)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1671 (let ((day (read (match-string 3 rfc822-string)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1672 (month-name (match-string 4 rfc822-string))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1673 (month 0)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1674 (year (read (match-string 5 rfc822-string)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1675 (hour (read (or (match-string 7 rfc822-string) "0")))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1676 (minute (read (or (match-string 8 rfc822-string) "0")))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1677 (second (read (or (match-string 10 rfc822-string) "0")))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1678 (zone (match-string 12 rfc822-string))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1679 (sign (match-string 13 rfc822-string))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1680 (offset-hour (read (or (match-string 14 rfc822-string)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1681 "0")))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1682 (offset-minute (read (or (match-string 15 rfc822-string)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1683 "0")))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1684 ;;FIXME
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1685 )
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1686 (when zone
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1687 (cond ((string= sign "+")
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1688 (setq hour (- hour offset-hour))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1689 (setq minute (- minute offset-minute)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1690 ((string= sign "-")
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1691 (setq hour (+ hour offset-hour))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1692 (setq minute (+ minute offset-minute)))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1693 (condition-case error-data
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1694 (let ((i 1))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1695 (mapc (lambda (m)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1696 (if (string= month-name m)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1697 (setq month i))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1698 (setq i (1+ i)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1699 '("Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1700 "Sep" "Oct" "Nov" "Dec"))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1701 (encode-time second minute hour day month year t))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1702 (error
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1703 (message "Cannot decode \"%s\": %s %s" rfc822-string
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1704 (car error-data) (cdr error-data))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1705 nil))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1706 nil))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1707
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1708 (defun newsticker--lists-intersect-p (list1 list2)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1709 "Return t if LIST1 and LIST2 share elements."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1710 (let ((result nil))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1711 (mapc (lambda (elt)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1712 (if (memq elt list2)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1713 (setq result t)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1714 list1)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1715 result))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1716
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1717 (defun newsticker--update-process-ids ()
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1718 "Update list of ids of active newsticker processes.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1719 Checks list of active processes against list of newsticker processes."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1720 (let ((active-procs (process-list))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1721 (new-list nil))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1722 (mapc (lambda (proc)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1723 (let ((id (process-id proc)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1724 (if (memq id newsticker--process-ids)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1725 (setq new-list (cons id new-list)))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1726 active-procs)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1727 (setq newsticker--process-ids new-list))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1728 (force-mode-line-update))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1729
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1730 ;; ======================================================================
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1731 ;;; Images
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1732 ;; ======================================================================
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1733 (defun newsticker--image-get (feed-name url)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1734 "Get image of the news site FEED-NAME from URL.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1735 If the image has been downloaded in the last 24h do nothing."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1736 (let ((image-name (concat newsticker-imagecache-dirname "/"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1737 feed-name)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1738 (if (and (file-exists-p image-name)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1739 (time-less-p (current-time)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1740 (time-add (nth 5 (file-attributes image-name))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1741 (seconds-to-time 86400))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1742 (newsticker--debug-msg "%s: Getting image for %s skipped"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1743 (format-time-string "%A, %H:%M" (current-time))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1744 feed-name)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1745 ;; download
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1746 (newsticker--debug-msg "%s: Getting image for %s"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1747 (format-time-string "%A, %H:%M" (current-time))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1748 feed-name)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1749 (let* ((buffername (concat " *newsticker-wget-image-" feed-name "*"))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1750 (item (or (assoc feed-name newsticker-url-list)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1751 (assoc feed-name newsticker-url-list-defaults)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1752 (error
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1753 "Cannot get news for %s: Check newsticker-url-list"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1754 feed-name)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1755 (wget-arguments (or (car (cdr (cdr (cdr (cdr item)))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1756 newsticker-wget-arguments)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1757 (save-excursion
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1758 (set-buffer (get-buffer-create buffername))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1759 (erase-buffer)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1760 ;; throw an error if there is an old wget-process around
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1761 (if (get-process feed-name)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1762 (error "Another wget-process is running for image %s"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1763 feed-name))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1764 ;; start wget
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1765 (let* ((args (append wget-arguments (list url)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1766 (proc (apply 'start-process feed-name buffername
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1767 newsticker-wget-name args)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1768 (set-process-coding-system proc 'no-conversion 'no-conversion)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1769 (set-process-sentinel proc 'newsticker--image-sentinel)))))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1770
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1771 (defun newsticker--image-sentinel (process event)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1772 "Sentinel for image-retrieving PROCESS caused by EVENT."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1773 (let* ((p-status (process-status process))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1774 (exit-status (process-exit-status process))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1775 (feed-name (process-name process)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1776 ;; catch known errors (zombie processes, rubbish-xml, etc.)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1777 ;; if an error occurs the news feed is not updated!
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1778 (catch 'oops
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1779 (unless (and (eq p-status 'exit)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1780 (= exit-status 0))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1781 (message "%s: Error while retrieving image from %s"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1782 (format-time-string "%A, %H:%M" (current-time))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1783 feed-name)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1784 (throw 'oops nil))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1785 (let (image-name)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1786 (save-excursion
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1787 (set-buffer (process-buffer process))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1788 (setq image-name (concat newsticker-imagecache-dirname "/"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1789 feed-name))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1790 (set-buffer-file-coding-system 'no-conversion)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1791 ;; make sure the cache dir exists
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1792 (unless (file-directory-p newsticker-imagecache-dirname)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1793 (make-directory newsticker-imagecache-dirname))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1794 ;; write and close buffer
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1795 (let ((require-final-newline nil)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1796 (backup-inhibited t)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1797 (coding-system-for-write 'no-conversion))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1798 (write-region nil nil image-name nil 'quiet))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1799 (set-buffer-modified-p nil)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1800 (kill-buffer (current-buffer)))))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1801
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1802
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1803
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1804 (defun newsticker--insert-image (img string)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1805 "Insert IMG with STRING at point."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1806 (insert-image img string))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1807
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1808 ;; ======================================================================
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1809 ;;; HTML rendering
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1810 ;; ======================================================================
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1811 (defun newsticker-htmlr-render (pos1 pos2) ;
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1812 "Replacement for `htmlr-render'.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1813 Renders the HTML code in the region POS1 to POS2 using htmlr."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1814 (let ((str (buffer-substring-no-properties pos1 pos2)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1815 (delete-region pos1 pos2)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1816 (insert
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1817 (with-temp-buffer
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1818 (insert str)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1819 (goto-char (point-min))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1820 ;; begin original htmlr-render
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1821 (when (fboundp 'htmlr-reset) (htmlr-reset))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1822 ;; something omitted here...
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1823 (when (fboundp 'htmlr-step)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1824 (while (< (point) (point-max))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1825 (htmlr-step)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1826 ;; end original htmlr-render
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1827 (newsticker--remove-whitespace (buffer-string))))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1828
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1829 ;; ======================================================================
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1830 ;;; Manipulation of cached data
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1831 ;; ======================================================================
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1832 (defun newsticker--cache-set-preformatted-contents (item contents)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1833 "Set preformatted contents of ITEM to CONTENTS."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1834 (if (nthcdr 6 item)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1835 (setcar (nthcdr 6 item) contents)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1836 (setcdr (nthcdr 5 item) (list contents))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1837
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1838 (defun newsticker--cache-set-preformatted-title (item title)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1839 "Set preformatted title of ITEM to TITLE."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1840 (if (nthcdr 7 item)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1841 (setcar (nthcdr 7 item) title)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1842 (setcdr (nthcdr 6 item) title)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1843
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1844 (defun newsticker--cache-replace-age (data feed old-age new-age)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1845 "Mark all items in DATA in FEED which carry age OLD-AGE with NEW-AGE.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1846 If FEED is 'any it applies to all feeds. If OLD-AGE is 'any,
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1847 all marks are replaced by NEW-AGE. Removes all pre-formatted contents."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1848 (mapc (lambda (a-feed)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1849 (when (or (eq feed 'any)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1850 (eq (car a-feed) feed))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1851 (let ((items (cdr a-feed)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1852 (mapc (lambda (item)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1853 (when (or (eq old-age 'any)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1854 (eq (newsticker--age item) old-age))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1855 (setcar (nthcdr 4 item) new-age)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1856 (newsticker--do-forget-preformatted item)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1857 items))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1858 data)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1859 data)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1860
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1861 (defun newsticker--cache-mark-expired (data feed old-age new-age time)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1862 "Mark all expired entries.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1863 This function sets the age entries in DATA in the feed FEED. If
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1864 an item's age is OLD-AGE it is set to NEW-AGE if the item is
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1865 older than TIME."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1866 (mapc
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1867 (lambda (a-feed)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1868 (when (or (eq feed 'any)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1869 (eq (car a-feed) feed))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1870 (let ((items (cdr a-feed)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1871 (mapc
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1872 (lambda (item)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1873 (when (eq (newsticker--age item) old-age)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1874 (let ((exp-time (time-add (newsticker--time item)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1875 (seconds-to-time time))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1876 (when (time-less-p exp-time (current-time))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1877 (newsticker--debug-msg
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1878 "Item `%s' from %s has expired on %s"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1879 (newsticker--title item)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1880 (format-time-string "%Y-%02m-%d, %H:%M"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1881 (newsticker--time item))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1882 (format-time-string "%Y-%02m-%d, %H:%M" exp-time))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1883 (setcar (nthcdr 4 item) new-age)))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1884 items))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1885 data)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1886 data)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1887
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1888 (defun newsticker--cache-contains (data feed title desc link age
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1889 &optional guid)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1890 "Check DATA whether FEED contains an item with the given properties.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1891 This function returns the contained item or nil if it is not
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1892 contained.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1893 The properties which are checked are TITLE, DESC, LINK, AGE, and
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1894 GUID. In general all properties must match in order to return a
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1895 certain item, except for the following cases.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1896
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1897 If AGE equals 'feed the TITLE, DESCription and LINK do not
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1898 matter. If DESC is nil it is ignored as well. If
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1899 `newsticker-desc-comp-max' is non-nil, only the first
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1900 `newsticker-desc-comp-max' characters of DESC are taken into
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1901 account.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1902
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1903 If GUID is non-nil it is sufficient to match this value, and the
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1904 other properties are ignored."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1905 ;;(newsticker--debug-msg "Looking for %s guid=%s" title guid)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1906 (condition-case nil
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1907 (catch 'found
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1908 (when (and desc newsticker-desc-comp-max
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1909 (> (length desc) newsticker-desc-comp-max))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1910 (setq desc (substring desc 0 newsticker-desc-comp-max)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1911 (mapc
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1912 (lambda (this-feed)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1913 (when (eq (car this-feed) feed)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1914 (mapc (lambda (anitem)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1915 (when (cond (guid
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1916 ;; global unique id can match
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1917 (string= guid (newsticker--guid anitem)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1918 (t;;FIXME?
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1919 (or
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1920 ;; or title, desc, etc.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1921 (and
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1922 ;;(or (not (eq age 'feed))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1923 ;; (eq (newsticker--age anitem) 'feed))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1924 (string= (newsticker--title anitem)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1925 title)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1926 (or (not link)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1927 (string= (newsticker--link anitem)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1928 link))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1929 (or (not desc)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1930 (if (and desc newsticker-desc-comp-max
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1931 (> (length (newsticker--desc
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1932 anitem))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1933 newsticker-desc-comp-max))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1934 (string= (substring
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1935 (newsticker--desc anitem)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1936 0
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1937 newsticker-desc-comp-max)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1938 desc)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1939 (string= (newsticker--desc anitem)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1940 desc)))))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1941 ;;(newsticker--debug-msg "Found %s guid=%s"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1942 ;; (newsticker--title anitem)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1943 ;; (newsticker--guid anitem))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1944 (throw 'found anitem)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1945 (cdr this-feed))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1946 data)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1947 ;;(newsticker--debug-msg "Found nothing")
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1948 nil)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1949 (error nil)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1950
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1951 (defun newsticker--cache-add (data feed-name-symbol title desc link time age
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1952 position extra-elements
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1953 &optional updated-time updated-age
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1954 preformatted-contents
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1955 preformatted-title)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1956 "Add another item to cache data.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1957 Add to DATA in the FEED-NAME-SYMBOL an item with TITLE, DESC,
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1958 LINK, TIME, AGE, POSITION, and EXTRA-ELEMENTS. If this item is
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1959 contained already, its time is set to UPDATED-TIME, its mark is
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1960 set to UPDATED-AGE, and its pre-formatted contents is set to
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1961 PREFORMATTED-CONTENTS and PREFORMATTED-TITLE. Returns the age
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1962 which the item got."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1963 (let* ((guid (newsticker--guid-to-string (assoc 'guid extra-elements)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1964 (item (newsticker--cache-contains data feed-name-symbol title desc link
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1965 age guid)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1966 ;;(message "guid=%s" guid)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1967 (if item
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1968 ;; does exist already -- change age, update time and position
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1969 (progn
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1970 ;;(newsticker--debug-msg "Updating item %s %s %s %s %s -> %s %s
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1971 ;; (guid %s -> %s)"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1972 ;; feed-name-symbol title link time age
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1973 ;; updated-time updated-age
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1974 ;; guid (newsticker--guid item))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1975 (if (nthcdr 5 item)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1976 (setcar (nthcdr 5 item) position)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1977 (setcdr (nthcdr 4 item) (list position)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1978 (setcar (nthcdr 4 item) updated-age)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1979 (if updated-time
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1980 (setcar (nthcdr 3 item) updated-time))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1981 ;; replace cached pre-formatted contents
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1982 (newsticker--cache-set-preformatted-contents
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1983 item preformatted-contents)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1984 (newsticker--cache-set-preformatted-title
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1985 item preformatted-title))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1986 ;; did not exist or age equals 'feed-name-symbol
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1987 (setq item (list title desc link time age position preformatted-contents
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1988 preformatted-title extra-elements))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1989 ;;(newsticker--debug-msg "Adding item %s" item)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1990 (catch 'found
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1991 (mapc (lambda (this-feed)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1992 (when (eq (car this-feed) feed-name-symbol)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1993 (setcdr this-feed (nconc (cdr this-feed) (list item)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1994 (throw 'found this-feed)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1995 data)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1996 ;; the feed is not contained
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1997 (add-to-list 'data (list feed-name-symbol item) t))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1998 data)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
1999
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2000 (defun newsticker--cache-remove (data feed-symbol age)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2001 "Remove all entries from DATA in the feed FEED-SYMBOL with AGE.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2002 FEED-SYMBOL may be 'any. Entries from old feeds, which are no longer in
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2003 `newsticker-url-list' or `newsticker-url-list-defaults', are removed as
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2004 well."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2005 (let* ((pos data)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2006 (feed (car pos))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2007 (last-pos nil))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2008 (while feed
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2009 (if (or (assoc (symbol-name (car feed)) newsticker-url-list)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2010 (assoc (symbol-name (car feed)) newsticker-url-list-defaults))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2011 ;; feed is still valid=active
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2012 ;; (message "Keeping feed %s" (car feed))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2013 (if (or (eq feed-symbol 'any)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2014 (eq feed-symbol (car feed)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2015 (let* ((item-pos (cdr feed))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2016 (item (car item-pos))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2017 (prev-pos nil))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2018 (while item
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2019 ;;(message "%s" (car item))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2020 (if (eq age (newsticker--age item))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2021 ;; remove this item
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2022 (progn
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2023 ;;(message "Removing item %s" (car item))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2024 (if prev-pos
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2025 (setcdr prev-pos (cdr item-pos))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2026 (setcdr feed (cdr item-pos))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2027 ;;(message "Keeping item %s" (car item))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2028 (setq prev-pos item-pos))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2029 (setq item-pos (cdr item-pos))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2030 (setq item (car item-pos)))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2031 ;; feed is not active anymore
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2032 ;; (message "Removing feed %s" (car feed))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2033 (if last-pos
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2034 (setcdr last-pos (cdr pos))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2035 (setq data (cdr pos))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2036 (setq last-pos pos)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2037 (setq pos (cdr pos))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2038 (setq feed (car pos)))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2039
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2040 ;; ======================================================================
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2041 ;;; Sorting
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2042 ;; ======================================================================
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2043 (defun newsticker--cache-item-compare-by-time (item1 item2)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2044 "Compare two news items ITEM1 and ITEM2 by comparing their time values."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2045 (catch 'result
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2046 (let ((age1 (newsticker--age item1))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2047 (age2 (newsticker--age item2)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2048 (if (not (eq age1 age2))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2049 (cond ((eq age1 'obsolete)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2050 (throw 'result nil))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2051 ((eq age2 'obsolete)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2052 (throw 'result t)))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2053 (let* ((time1 (newsticker--time item1))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2054 (time2 (newsticker--time item2)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2055 (cond ((< (nth 0 time1) (nth 0 time2))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2056 nil)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2057 ((> (nth 0 time1) (nth 0 time2))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2058 t)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2059 ((< (nth 1 time1) (nth 1 time2))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2060 nil)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2061 ((> (nth 1 time1) (nth 1 time2))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2062 t)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2063 ((< (or (nth 2 time1) 0) (or (nth 2 time2) 0))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2064 nil)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2065 ((> (or (nth 2 time1) 0) (or (nth 2 time2) 0))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2066 t)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2067 (t
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2068 nil)))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2069
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2070 (defun newsticker--cache-item-compare-by-title (item1 item2)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2071 "Compare ITEM1 and ITEM2 by comparing their titles."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2072 (catch 'result
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2073 (let ((age1 (newsticker--age item1))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2074 (age2 (newsticker--age item2)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2075 (if (not (eq age1 age2))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2076 (cond ((eq age1 'obsolete)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2077 (throw 'result nil))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2078 ((eq age2 'obsolete)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2079 (throw 'result t)))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2080 (string< (newsticker--title item1) (newsticker--title item2))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2081
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2082 (defun newsticker--cache-item-compare-by-position (item1 item2)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2083 "Compare ITEM1 and ITEM2 by comparing their original positions."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2084 (catch 'result
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2085 (let ((age1 (newsticker--age item1))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2086 (age2 (newsticker--age item2)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2087 (if (not (eq age1 age2))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2088 (cond ((eq age1 'obsolete)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2089 (throw 'result nil))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2090 ((eq age2 'obsolete)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2091 (throw 'result t)))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2092 (< (or (newsticker--pos item1) 0) (or (newsticker--pos item2) 0))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2093
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2094
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2095
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2096 (defun newsticker--cache-save ()
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2097 "Update and save newsticker cache file."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2098 (interactive)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2099 (newsticker--cache-update t))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2100
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2101 (defun newsticker--cache-update (&optional save)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2102 "Update newsticker cache file.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2103 If optional argument SAVE is not nil the cache file is saved to disk."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2104 (save-excursion
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2105 (let ((coding-system-for-write 'utf-8))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2106 (with-temp-buffer
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2107 (setq buffer-undo-list t)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2108 (erase-buffer)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2109 (insert ";; -*- coding: utf-8 -*-\n")
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2110 (insert (prin1-to-string newsticker--cache))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2111 (when save
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2112 (set-visited-file-name newsticker-cache-filename)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2113 (save-buffer))))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2114
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2115 (defun newsticker--cache-get-feed (feed)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2116 "Return the cached data for the feed FEED.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2117 FEED is a symbol!"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2118 (assoc feed newsticker--cache))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2119
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2120 ;; ======================================================================
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2121 ;;; Statistics
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2122 ;; ======================================================================
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2123 (defun newsticker--stat-num-items (feed &rest ages)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2124 "Return number of items in the given FEED which have one of the given AGES.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2125 If AGES is nil, the total number of items is returned."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2126 (let ((items (cdr (newsticker--cache-get-feed feed)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2127 (num 0))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2128 (while items
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2129 (if ages
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2130 (if (memq (newsticker--age (car items)) ages)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2131 (setq num (1+ num)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2132 (if (memq (newsticker--age (car items)) '(new old immortal obsolete))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2133 (setq num (1+ num))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2134 (setq items (cdr items)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2135 num))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2136
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2137 (defun newsticker--stat-num-items-total (&optional age)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2138 "Return total number of items in all feeds which have the given AGE.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2139 If AGE is nil, the total number of items is returned."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2140 (apply '+
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2141 (mapcar (lambda (feed)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2142 (if age
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2143 (newsticker--stat-num-items (intern (car feed)) age)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2144 (newsticker--stat-num-items (intern (car feed)))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2145 (append newsticker-url-list-defaults newsticker-url-list))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2146
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2147 ;; ======================================================================
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2148 ;;; OPML
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2149 ;; ======================================================================
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2150 (defun newsticker-opml-export ()
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2151 "OPML subscription export.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2152 Export subscriptions to a buffer in OPML Format."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2153 (interactive)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2154 (with-current-buffer (get-buffer-create "*OPML Export*")
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2155 (set-buffer-file-coding-system 'utf-8)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2156 (insert (concat
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2157 "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2158 "<!-- OPML generated by Emacs newsticker.el -->\n"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2159 "<opml version=\"1.0\">\n"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2160 " <head>\n"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2161 " <title>mySubscriptions</title>\n"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2162 " <dateCreated>" (format-time-string "%a, %d %b %Y %T %z")
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2163 "</dateCreated>\n"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2164 " <ownerEmail>" user-mail-address "</ownerEmail>\n"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2165 " <ownerName>" (user-full-name) "</ownerName>\n"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2166 " </head>\n"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2167 " <body>\n"))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2168 (mapc (lambda (sub)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2169 (insert " <outline text=\"")
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2170 (insert (newsticker--title sub))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2171 (insert "\" xmlUrl=\"")
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2172 (insert (cadr sub))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2173 (insert "\"/>\n"))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2174 (append newsticker-url-list newsticker-url-list-defaults))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2175 (insert " </body>\n</opml>\n"))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2176 (pop-to-buffer "*OPML Export*")
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2177 (when (fboundp 'sgml-mode)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2178 (sgml-mode)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2179
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2180 (defun newsticker--opml-import-outlines (outlines)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2181 "Recursively import OUTLINES from OPML data.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2182 Note that nested outlines are currently flattened -- i.e. grouping is
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2183 removed."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2184 (mapc (lambda (outline)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2185 (let ((name (xml-get-attribute outline 'text))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2186 (url (xml-get-attribute outline 'xmlUrl))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2187 (children (xml-get-children outline 'outline)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2188 (unless (string= "" url)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2189 (add-to-list 'newsticker-url-list
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2190 (list name url nil nil nil) t))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2191 (if children
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2192 (newsticker--opml-import-outlines children))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2193 outlines))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2194
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2195 (defun newsticker-opml-import (filename)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2196 "Import OPML data from FILENAME."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2197 (interactive "fOPML file: ")
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2198 (set-buffer (find-file-noselect filename))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2199 (goto-char (point-min))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2200 (let* ((node-list (xml-parse-region (point-min) (point-max)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2201 (body (car (xml-get-children (car node-list) 'body)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2202 (outlines (xml-get-children body 'outline)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2203 (newsticker--opml-import-outlines outlines))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2204 (customize-variable 'newsticker-url-list))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2205
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2206 ;; ======================================================================
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2207 ;;; Auto marking
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2208 ;; ======================================================================
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2209 (defun newsticker--run-auto-mark-filter (feed item)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2210 "Automatically mark an item as old or immortal.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2211 This function checks the variable `newsticker-auto-mark-filter-list'
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2212 for an entry that matches FEED and ITEM."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2213 (let ((case-fold-search t))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2214 (mapc (lambda (filter)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2215 (let ((filter-feed (car filter))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2216 (pattern-list (cadr filter)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2217 (when (string-match filter-feed feed)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2218 (newsticker--do-run-auto-mark-filter item pattern-list))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2219 newsticker-auto-mark-filter-list)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2220
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2221 (defun newsticker--do-run-auto-mark-filter (item list)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2222 "Actually compare ITEM against the pattern-LIST.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2223 LIST must be an element of `newsticker-auto-mark-filter-list'."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2224 (mapc (lambda (pattern)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2225 (let ((age (nth 0 pattern))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2226 (place (nth 1 pattern))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2227 (regexp (nth 2 pattern))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2228 (title (newsticker--title item))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2229 (desc (newsticker--desc item)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2230 (when (or (eq place 'title) (eq place 'all))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2231 (when (and title (string-match regexp title))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2232 (newsticker--debug-msg "Auto-marking as %s: `%s'"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2233 age (newsticker--title item))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2234 (setcar (nthcdr 4 item) age)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2235 (when (or (eq place 'description) (eq place 'all))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2236 (when (and desc (string-match regexp desc))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2237 (newsticker--debug-msg "Auto-marking as %s: `%s'"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2238 age (newsticker--title item))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2239 (setcar (nthcdr 4 item) age)))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2240 list))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2241
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2242
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2243 ;; ======================================================================
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2244 ;;; Hook samples
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2245 ;; ======================================================================
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2246 (defun newsticker-new-item-functions-sample (feed item)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2247 "Demonstrate the use of the `newsticker-new-item-functions' hook.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2248 This function just prints out the values of the FEED and title of the ITEM."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2249 (message (concat "newsticker-new-item-functions-sample: feed=`%s', "
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2250 "title=`%s'")
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2251 feed (newsticker--title item)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2252
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2253 (defun newsticker-download-images (feed item)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2254 "Download the first image.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2255 If FEED equals \"imagefeed\" download the first image URL found
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2256 in the description=contents of ITEM to the directory
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2257 \"~/tmp/newsticker/FEED/TITLE\" where TITLE is the title of the item."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2258 (when (string= feed "imagefeed")
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2259 (let ((title (newsticker--title item))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2260 (desc (newsticker--desc item)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2261 (when (string-match "<img src=\"\\(http://[^ \"]+\\)\"" desc)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2262 (let ((url (substring desc (match-beginning 1) (match-end 1)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2263 (temp-dir (concat "~/tmp/newsticker/" feed "/" title))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2264 (org-dir default-directory))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2265 (unless (file-directory-p temp-dir)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2266 (make-directory temp-dir t))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2267 (cd temp-dir)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2268 (message "Getting image %s" url)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2269 (apply 'start-process "wget-image"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2270 " *newsticker-wget-download-images*"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2271 newsticker-wget-name
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2272 (list url))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2273 (cd org-dir))))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2274
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2275 (defun newsticker-download-enclosures (feed item)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2276 "In all FEEDs download the enclosed object of the news ITEM.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2277 The object is saved to the directory \"~/tmp/newsticker/FEED/TITLE\", which
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2278 is created if it does not exist. TITLE is the title of the news
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2279 item. Argument FEED is ignored.
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2280 This function is suited for adding it to `newsticker-new-item-functions'."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2281 (let ((title (newsticker--title item))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2282 (enclosure (newsticker--enclosure item)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2283 (when enclosure
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2284 (let ((url (cdr (assoc 'url enclosure)))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2285 (temp-dir (concat "~/tmp/newsticker/" feed "/" title))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2286 (org-dir default-directory))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2287 (unless (file-directory-p temp-dir)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2288 (make-directory temp-dir t))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2289 (cd temp-dir)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2290 (message "Getting enclosure %s" url)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2291 (apply 'start-process "wget-enclosure"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2292 " *newsticker-wget-download-enclosures*"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2293 newsticker-wget-name
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2294 (list url))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2295 (cd org-dir)))))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2296
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2297 ;; ======================================================================
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2298 ;;; Retrieve samples
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2299 ;; ======================================================================
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2300 (defun newsticker-retrieve-random-message (feed-name)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2301 "Return an artificial RSS string under the name FEED-NAME."
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2302 (concat "<?xml version=\"1.0\" encoding=\"iso-8859-1\" ?><rss version=\"0.91\">"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2303 "<channel>"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2304 "<title>newsticker-retrieve-random-message</title>"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2305 "<description>Sample retrieval function</description>"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2306 "<pubDate>FIXME Sat, 07 Sep 2005 00:00:01 GMT</pubDate>"
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2307 "<item><title>" (format "Your lucky number is %d" (random 10000))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2308 "</title><description>" (format "Or maybe it is %d" (random 10000))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2309 "</description></item></channel></rss>"))
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2310
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2311 (provide 'newsticker-backend)
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2312
c9fb857e1ebe Initial check-in.
Ulf Jasper <ulf.jasper@web.de>
parents:
diff changeset
2313 ;;; newsticker-backend.el ends here