git.fiddlerwoaroof.com
Raw Blame History
(in-package :fwoar.rss-reader)

(defgeneric feed-key (object))
(defgeneric feed-url (object))

(fw.lu:defclass+ feed-reference ()
  ((%key :initarg :key :reader feed-key)
   (%url :initarg :url :reader feed-url)
   (%data)))

(defgeneric refresh-data (feed-reference)
  (:method ((feed-reference feed-reference))
    (setf (slot-value feed-reference '%data)
          (alimenta.pull-feed:pull-feed
           (feed-url feed-reference)))))

(defmethod slot-unbound (_ (instance feed-reference) (slot-name (eql '%data)))
  (refresh-data instance))

(fw.lu:defclass+ plump-cleaner
    ((feed-reference (key url)))
  ())

(defgeneric resolve-feed-reference (reference)
  (:method ((r feed-reference))
    (slot-value r '%data)))

(defgeneric prepare-feed-item-description (reference item)
  (:method ((r feed-reference) (item alimenta:item))
    (alimenta:description item))
  (:method ((r plump-cleaner) (item alimenta:item))
    (let ((description (alimenta:description item)))
      (when description
        (plump:text
         (plump:parse
          description))))))

(defun id->slug (it)
  (ironclad:byte-array-to-hex-string
   (ironclad:digest-sequence :sha256
                             (babel:string-to-octets it))))