Author: hhubner
Date: 2006-07-22 08:59:15 -0400 (Sat, 22 Jul 2006)
New Revision: 1971
Modified:
branches/xml-class-rework/bknr/src/bknr.asd
branches/xml-class-rework/bknr/src/images/image-handlers.lisp
branches/xml-class-rework/bknr/src/packages.lisp
branches/xml-class-rework/bknr/src/rss/rss.lisp
branches/xml-class-rework/bknr/src/rss/test.lisp
branches/xml-class-rework/bknr/src/web/rss-handlers.lisp
Log:
Remove old RSS handler code.
Modified: branches/xml-class-rework/bknr/src/bknr.asd
===================================================================
--- branches/xml-class-rework/bknr/src/bknr.asd 2006-07-22 12:58:44 UTC (rev 1970)
+++ branches/xml-class-rework/bknr/src/bknr.asd 2006-07-22 12:59:15 UTC (rev 1971)
@@ -114,7 +114,7 @@
"templates"
"site"
"web-utils")))
- :depends-on ("sysclasses" "packages" "xhtmlgen"))
+ :depends-on ("sysclasses" "packages" "xhtmlgen" "rss"))
(:module "images" :components ((:file "image")
Modified: branches/xml-class-rework/bknr/src/images/image-handlers.lisp
===================================================================
--- branches/xml-class-rework/bknr/src/images/image-handlers.lisp 2006-07-22 12:58:44 UTC (rev 1970)
+++ branches/xml-class-rework/bknr/src/images/image-handlers.lisp 2006-07-22 12:59:15 UTC (rev 1971)
@@ -152,6 +152,7 @@
(format nil "/intersection-rss/~A" (parse-url req)))
;;; rss image feeds
+#|
(defclass rss-image-handler (object-rss-handler image-page-handler)
())
@@ -183,6 +184,7 @@
(defclass rss-image-intersection-handler (rss-image-handler image-intersection-handler)
())
+|#
(defclass xml-image-browser-handler (image-handler xml-object-handler)
())
@@ -210,10 +212,12 @@
("/image-keyword" image-keyword-handler)
("/image-union" image-union-handler)
("/image-intersection" image-intersection-handler)
+ #|
("/rss-image" rss-image-handler)
("/rss-image-keyword" rss-image-keyword-handler)
("/rss-image-union" rss-image-union-handler)
("/rss-image-intersection" rss-image-intersection-handler)
+ |#
("/image" imageproc-handler)
("/image-import" image-import-handler)
("/session-image" session-image-handler)
Modified: branches/xml-class-rework/bknr/src/packages.lisp
===================================================================
--- branches/xml-class-rework/bknr/src/packages.lisp 2006-07-22 12:58:44 UTC (rev 1970)
+++ branches/xml-class-rework/bknr/src/packages.lisp 2006-07-22 12:59:15 UTC (rev 1971)
@@ -39,6 +39,8 @@
;; channel
#:rss-channel
+ #:find-rss-channel
+ #:make-rss-channel
#:rss-channel-cleanup
#:rss-channel-about
#:rss-channel-title
@@ -321,7 +323,6 @@
#:keywords-handler
#:rss-handler
- #:object-rss-handler
#:define-bknr-webserver-module
Modified: branches/xml-class-rework/bknr/src/rss/rss.lisp
===================================================================
--- branches/xml-class-rework/bknr/src/rss/rss.lisp 2006-07-22 12:58:44 UTC (rev 1970)
+++ branches/xml-class-rework/bknr/src/rss/rss.lisp 2006-07-22 12:59:15 UTC (rev 1971)
@@ -28,11 +28,17 @@
;; One rss-item can only be in one channel.
+;; The channel object has more required elements than the standard
+;; specifies in order to make the generated feed documents more widely
+;; accepted.
+
;;; Paul Graham, On Lisp, p191
(defmacro aif (test-form then-form &optional else-form)
`(let ((it ,test-form))
(if it ,then-form ,else-form)))
+;; Class for channels
+
(define-persistent-class rss-channel ()
((name :update
:index-type string-unique-index
@@ -44,6 +50,14 @@
(max-item-age :update :initform (* 7 3600))
(items :update :initform nil)))
+;; Mixin for items
+
+(define-persistent-class rss-item ()
+ ((pub-date :read)))
+
+(defun make-rss-channel (name title description link &rest args)
+ (apply #'make-object 'rss-channel :name name :title title :description description :link link args))
+
(defun render-mandatory-element (channel element)
(with-element (string-downcase (symbol-name element))
(text (aif (and (slot-boundp channel element)
@@ -58,6 +72,7 @@
(with-element "channel"
(dolist (slot '(title description link))
(render-mandatory-element channel slot))
+
(dolist (item (rss-channel-items channel))
(rss-item-xml item))))))
@@ -96,11 +111,6 @@
(defmethod add-item ((channel (eql nil)) (item rss-item))
(warn "no RSS channel defined for item ~A" item))
-;; Mixin for items
-
-(define-persistent-class rss-item ()
- ((pub-date :read)))
-
(defmethod initialize-persistent-instance :after ((rss-item rss-item))
(setf (slot-value rss-item 'pub-date) (get-universal-time))
(add-item (rss-item-channel rss-item) rss-item))
@@ -120,7 +130,7 @@
(defmethod rss-item-source ((rss-item rss-item)))
(defun item-slot-element (item slot-name)
- (let ((accessor (kmrcl:concat-symbol 'rss-item- slot-name)))
+ (let ((accessor (kmrcl:concat-symbol-pkg (find-package :bknr.rss) 'rss-item- slot-name)))
(aif (funcall accessor item)
(with-element (string-downcase (symbol-name slot-name))
(text it)))))
@@ -131,4 +141,3 @@
(item-slot-element item slot))
(with-element "pubDate"
(text (format-date-time (rss-item-pub-date item) :mail-style t)))))
-
Modified: branches/xml-class-rework/bknr/src/rss/test.lisp
===================================================================
--- branches/xml-class-rework/bknr/src/rss/test.lisp 2006-07-22 12:58:44 UTC (rev 1970)
+++ branches/xml-class-rework/bknr/src/rss/test.lisp 2006-07-22 12:59:15 UTC (rev 1971)
@@ -12,4 +12,6 @@
(defmethod rss-item-author ((item test-item))
"Hans Hübner")
-(open-store "/tmp/datastore/")
\ No newline at end of file
+(open-store "/tmp/datastore/")
+
+(start :port 8383)
\ No newline at end of file
Modified: branches/xml-class-rework/bknr/src/web/rss-handlers.lisp
===================================================================
--- branches/xml-class-rework/bknr/src/web/rss-handlers.lisp 2006-07-22 12:58:44 UTC (rev 1970)
+++ branches/xml-class-rework/bknr/src/web/rss-handlers.lisp 2006-07-22 12:59:15 UTC (rev 1971)
@@ -1,28 +1,15 @@
(in-package :bknr.web)
;;; rss handlers
-(defclass rss-handler (page-handler)
- ())
+(defclass rss-handler (object-handler)
+ ()
+ (:default-initargs :query-function #'bknr.rss:find-rss-channel))
-(defgeneric create-rss-feed (handler req))
+(defmethod handle-object ((handler rss-handler) (channel (eql nil)) req)
+ (error "invalid channel name"))
-(defmethod handle ((handler rss-handler) req)
+(defmethod handle-object ((handler rss-handler) (channel bknr.rss:rss-channel) req)
(with-bknr-http-response (req :content-type "text/xml")
(with-http-body (req *ent*)
(html (:princ "<?xml version=\"1.0\"?>")
- (write-xml
- (bknr.rss:rss-to-xml (create-rss-feed handler req))
- *html-stream* :indent t)))))
-
-(defclass object-rss-handler (object-handler rss-handler)
- ())
-
-(defgeneric create-object-rss-feed (handler object req))
-
-(defmethod handle-object ((handler object-rss-handler) object req)
- (with-bknr-http-response (req :content-type "text/xml")
- (with-http-body (req *ent*)
- (html (:princ "<?xml version=\"1.0\"?>")
- (write-xml
- (bknr.rss:rss-to-xml (create-object-rss-feed handler object req))
- *html-stream* :indent t)))))
+ (bknr.rss:rss-channel-xml channel *html-stream*)))))