diff of 8f82b5d9a54871f29f27ae8b80769825fd2680a3

8f82b5d9a54871f29f27ae8b80769825fd2680a3
diff --git a/src/rss/reader-db.lisp b/src/rss/reader-db.lisp
index c814346..e474ac4 100644
--- a/src/rss/reader-db.lisp
+++ b/src/rss/reader-db.lisp
@@ -61,12 +61,8 @@ pipes it through trivial-utf-8:utf-8-bytes-to-string"
     xmls:node-children
     first))
 
-(defun update-feed (feed)
-  (let* ((url (gethash "url" feed))
-	 (feed-id (gethash "id" feed))
-	 (feed-contents (download url))
-	 (feed-parsed (xmls:parse feed-contents))
-	 (channel (first (xmls:node-children feed-parsed))))
+(defun parse-rss (feed-id feed-parsed)
+  (let ((channel (first (xmls:node-children feed-parsed))))
     (dolist (item (remove-if-not (lambda (item)
 				   (string= (xmls:node-name item) "item"))
 				 (xmls:node-children channel)))
@@ -84,6 +80,35 @@ pipes it through trivial-utf-8:utf-8-bytes-to-string"
 		  pubdate)
 	(insert-feed-item title link description author pubDate feed-id)))))
 
+(defun parse-atom (author feed-id feed-parsed)
+  (let ((entries (->>
+		   feed-parsed
+		   (xmls:node-children)
+		   (remove-if-not (lambda (node)
+				    (string= (xmls:node-name node) "entry"))))))
+    (dolist (entry entries)
+      (let ((title (or (get-child-item-value "title" (xmls:node-children entry)) ""))
+	    (link (get-child-item-value "id" (xmls:node-children entry))) ;; atom calls hrefs 'id'
+	    (description (get-child-item-value "content" (xmls:node-children entry)))
+	    (pubDate (cl-epoch:universal->unix-time
+		      (parse-date-time (get-child-item-value "updated" (xmls:node-children entry))))))
+
+	(log:info "Inserting ~a~%" (list :title title :link link :description description :author author :pubDate pubDate :feed-id feed-id))
+	(insert-feed-item title link description author pubDate feed-id)))))
+
+(defun update-feed (feed)
+  (let* ((url (gethash "url" feed))
+	 (feed-id (gethash "id" feed))
+	 (feed-contents (download url))
+	 (feed-parsed (xmls:parse feed-contents))
+	 (feed-ns (xmls:node-ns feed-parsed)))
+
+    (if (cl-ppcre:all-matches-as-strings "Atom" feed-ns)
+	(let ((author (first (xmls:node-children
+			      (get-child-item-value "author" (xmls:node-children feed-parsed))))))
+	  (parse-atom author feed-id feed-parsed))
+	(parse-rss feed-id feed-parsed))))
+
 (defun current-hour ()
   (multiple-value-bind (second minute hour) (decode-universal-time (get-universal-time))
     hour))