src/view/rss.lisp

DOWNLOAD
(defpackage murja.view.rss
  (:use :cl :binding-arrows :spinneret :murja.rss.reader-db)
  (:import-from :murja.view.components.tabs :deftab)
  (:import-from :murja.middleware.auth :*user*)
  (:import-from :murja.model.user :user-id))

(in-package :murja.view.rss)

(deftab rss-single-item (:url "/blog/feeds/:feed-id/item/:item-id"
			 :subtab rss
			 :require-login t
			 :captured-url-params (feed-id item-id))
  (let* ((post-row (postmodern:query "UPDATE blog.feed_item
SET read_at = now()
WHERE id = $1 AND feed = $2
RETURNING id, title, description, link, author, pubdate" item-id feed-id :list)))
    (destructuring-bind (id title description link author pubdate) post-row
      (let ((p (make-instance 'murja.model.post:RSS-Post
			      :created-at pubdate
			      :id nil
			      :tags nil
			      :creator (make-instance 'murja.model.user:user
						      :nickname author)
			      :content description
			      :title title
			      :rss-link link)))
	(murja.view.components.blogpost:blogpost p)))))

(deftab rss-single-feed (:url "/blog/feeds/:feed-id"
			 :subtab rss
			 :params (&get archived)
			 :require-login t
			 :captured-url-params (feed-id archived))
  (let ((items (postmodern:query
		"SELECT id, fetched, title, link, author, pubdate
FROM blog.feed_item
WHERE feed = $1 AND (read_at is null OR $2) AND pubdate <= now()
ORDER BY pubdate DESC" feed-id (not (not archived))))
	(feed-name (caar (postmodern:query "SELECT name FROM blog.feed_subscription WHERE id = $1" feed-id)))
	(lisp-fixup:*rfc822* t))
    (:h* ("~a (~d)" feed-name (length items)))

    (:div
     (:a :href (str:replace-all "?archived=NIL" ""
		(easy-routes:genurl 'rss-single-feed :feed-id feed-id :archived (not archived)))
	 (if archived
	     "Show only unread"
	     "Show all")))
    
    (:ul
     (dolist (item items)
       (destructuring-bind (id fetched title link author pubdate) item
	 (:li (:a :href (easy-routes:genurl 'rss-single-item :feed-id feed-id :item-id id)  title)
	      (:section ("Published ~a" (lisp-fixup:fix-timestamp pubdate)))))))))



(deftab rss (:url "/blog/feeds/"
	     :title "RSS Feeds"
	     :require-login t)
  (let ((feeds (get-user-feeds2 (user-id *user*) nil))
	(lisp-fixup:*rfc822* t))
    (:ul.flowy-list
     (dolist (feed feeds)
       (destructuring-bind (id name url count last-modified) feed
	 (:li.flowy-list-item
	  (:h*
	   (:a :href (easy-routes:genurl 'rss-single-feed :feed-id id) (format nil "~a (~d)" name count)))
	  (:div "Feed is located in " (:a :href url url))
	  (:div ("Last updated ~a" (unless (equalp last-modified :NULL)
				     (lisp-fixup:fix-timestamp last-modified))))))))))