From 9f0061ff7825b18e7fbfcebf849be7cd192af340 Mon Sep 17 00:00:00 2001 From: Magnus Henoch Date: Wed, 15 Apr 2009 11:35:01 +0100 Subject: [PATCH] * org-feed.el (org-feed-alist): Add :parse-feed and :parse-entry options. (org-feed-update): Use them. --- lisp/org-feed.el | 28 ++++++++++++++++++++++++---- 1 files changed, 24 insertions(+), 4 deletions(-) diff --git a/lisp/org-feed.el b/lisp/org-feed.el index 3ece0f9..55b14bc 100644 --- a/lisp/org-feed.el +++ b/lisp/org-feed.el @@ -159,7 +159,17 @@ Here are the keyword-value pair allows in `org-feed-alist'. This function gets passed a list of all entries that have been handled before, but are now still in the feed and have *changed* since last handled (as evidenced by a different sha1 hash). - When the handler is called, point will be at the feed headline." + When the handler is called, point will be at the feed headline. + +:parse-feed function + This function gets passed a buffer, and should return a list of entries, + each being a property list containing the `:guid' and `:item-full-text' + keys. The default is `org-feed-parse-rss-feed'. + +:parse-entry function + This function gets passed an entry as returned by the parse-feed + function, and should return the entry with interesting properties added. + The default is `org-feed-parse-rss-entry'." :group 'org-feed :type '(repeat (list :value ("" "http://" "" "") @@ -184,6 +194,12 @@ Here are the keyword-value pair allows in `org-feed-alist'. (list :inline t :tag "Changed items" (const :changed-handler) (symbol :tag "Handler Function")) + (list :inline t :tag "Parse Feed" + (const :parse-feed) + (symbol :tag "Parse Feed Function")) + (list :inline t :tag "Parse Entry" + (const :parse-entry) + (symbol :tag "Parse Entry Function")) ))))) (defcustom org-feed-drawer "FEEDSTATUS" @@ -281,6 +297,10 @@ it can be a list structured like an entry in `org-feed-alist'." org-feed-default-template)) (drawer (or (nth 1 (memq :drawer feed)) org-feed-drawer)) + (parse-feed (or (nth 1 (memq :parse-feed feed)) + 'org-feed-parse-rss-feed)) + (parse-entry (or (nth 1 (memq :parse-entry feed)) + 'org-feed-parse-rss-entry)) feed-buffer inbox-pos new-formatted entries old-status status new changed guid-alist e guid olds) (setq feed-buffer (org-feed-get-feed url)) @@ -288,7 +308,7 @@ it can be a list structured like an entry in `org-feed-alist'." (error "Cannot get feed %s" name)) (when retrieve-only (throw 'exit feed-buffer)) - (setq entries (org-feed-parse-rss-feed feed-buffer)) + (setq entries (funcall parse-feed feed-buffer)) (ignore-errors (kill-buffer feed-buffer)) (save-excursion (save-window-excursion @@ -313,8 +333,8 @@ it can be a list structured like an entry in `org-feed-alist'." (push e changed)))) ;; Parse the relevant entries fully - (setq new (mapcar 'org-feed-parse-rss-entry new) - changed (mapcar 'org-feed-parse-rss-entry changed)) + (setq new (mapcar parse-entry new) + changed (mapcar parse-entry changed)) ;; Run the filter (when filter -- 1.6.0.2