|
@@ -109,22 +109,20 @@
|
|
|
(%make-feed (car (sqlite:execute-to-list db "select id, url, title, next_fetch, period from rss_feeds where url = ?" url)))))
|
|
(%make-feed (car (sqlite:execute-to-list db "select id, url, title, next_fetch, period from rss_feeds where url = ?" url)))))
|
|
|
|
|
|
|
|
(defun db-rss-add-feed (feed)
|
|
(defun db-rss-add-feed (feed)
|
|
|
- (with-db (db)
|
|
|
|
|
- (sqlite:execute-non-query db "insert into rss_feeds (url, title, next_fetch, period) values (?, ?, ?, ?)"
|
|
|
|
|
- (feed-url feed)
|
|
|
|
|
- (feed-title feed)
|
|
|
|
|
- (feed-next-fetch-unix feed)
|
|
|
|
|
- (feed-period feed))
|
|
|
|
|
- (setf (feed-id feed) (sqlite:last-insert-rowid db))
|
|
|
|
|
- feed))
|
|
|
|
|
|
|
+ (with-slots (url title period) feed
|
|
|
|
|
+ (let ((next-fetch (feed-next-fetch-unix feed)))
|
|
|
|
|
+ (with-db (db)
|
|
|
|
|
+ (sqlite:execute-non-query db "insert into rss_feeds (url, title, next_fetch, period) values (?, ?, ?, ?)"
|
|
|
|
|
+ url title next-fetch period)
|
|
|
|
|
+ (setf (feed-id feed) (sqlite:last-insert-rowid db))
|
|
|
|
|
+ feed))))
|
|
|
|
|
|
|
|
(defun db-rss-update-feed (feed)
|
|
(defun db-rss-update-feed (feed)
|
|
|
- (with-db (db)
|
|
|
|
|
- (sqlite:execute-non-query db "update rss_feeds set title = ?, next_fetch = ?, period = ? where id = ?"
|
|
|
|
|
- (feed-title feed)
|
|
|
|
|
- (feed-next-fetch-unix feed)
|
|
|
|
|
- (feed-period feed)
|
|
|
|
|
- (feed-id feed))))
|
|
|
|
|
|
|
+ (with-slots (id title period) feed
|
|
|
|
|
+ (let ((next-fetch (feed-next-fetch-unix feed)))
|
|
|
|
|
+ (with-db (db)
|
|
|
|
|
+ (sqlite:execute-non-query db "update rss_feeds set title = ?, next_fetch = ?, period = ? where id = ?"
|
|
|
|
|
+ title next-fetch period id)))))
|
|
|
|
|
|
|
|
(defun db-rss-get-active-feeds ()
|
|
(defun db-rss-get-active-feeds ()
|
|
|
(with-db (db)
|
|
(with-db (db)
|
|
@@ -137,31 +135,32 @@
|
|
|
(sqlite:execute-to-list db "select id, url, title, next_fetch, period from rss_feeds where id in (select feed_id from rss_chat_feeds where chat_id = ?)" chat-id))))
|
|
(sqlite:execute-to-list db "select id, url, title, next_fetch, period from rss_feeds where id in (select feed_id from rss_chat_feeds where chat_id = ?)" chat-id))))
|
|
|
|
|
|
|
|
(defun db-rss-get-feed-chats (feed)
|
|
(defun db-rss-get-feed-chats (feed)
|
|
|
- (flatten (with-db (db)
|
|
|
|
|
- (sqlite:execute-to-list db "select chat_id from rss_chat_feeds where feed_id = ?"
|
|
|
|
|
- (feed-id feed)))))
|
|
|
|
|
|
|
+ (with-slots (id) feed
|
|
|
|
|
+ (flatten (with-db (db)
|
|
|
|
|
+ (sqlite:execute-to-list db "select chat_id from rss_chat_feeds where feed_id = ?" id)))))
|
|
|
|
|
|
|
|
(defun db-rss-set-chat-feeds (chat-id feeds)
|
|
(defun db-rss-set-chat-feeds (chat-id feeds)
|
|
|
(with-db (db)
|
|
(with-db (db)
|
|
|
(sqlite:with-transaction db
|
|
(sqlite:with-transaction db
|
|
|
(sqlite:execute-non-query db "delete from rss_chat_feeds where chat_id = ?" chat-id)
|
|
(sqlite:execute-non-query db "delete from rss_chat_feeds where chat_id = ?" chat-id)
|
|
|
(dolist (feed feeds)
|
|
(dolist (feed feeds)
|
|
|
- (sqlite:execute-non-query db "insert into rss_chat_feeds (chat_id, feed_id) values (?, ?)" chat-id (feed-id feed))))))
|
|
|
|
|
|
|
+ (with-slots (id) feed
|
|
|
|
|
+ (sqlite:execute-non-query db "insert into rss_chat_feeds (chat_id, feed_id) values (?, ?)" chat-id id))))))
|
|
|
|
|
|
|
|
(defun db-rss-item-exists (item)
|
|
(defun db-rss-item-exists (item)
|
|
|
- (with-db (db)
|
|
|
|
|
- (sqlite:execute-single db "select id from rss_items where feed_id = ? and guid = ? limit 1"
|
|
|
|
|
- (feed-id (feed-item-feed item))
|
|
|
|
|
- (feed-item-guid item))))
|
|
|
|
|
|
|
+ (let ((feed-id (feed-id (feed-item-feed item)))
|
|
|
|
|
+ (guid (feed-item-guid item)))
|
|
|
|
|
+ (with-db (db)
|
|
|
|
|
+ (sqlite:execute-single db "select id from rss_items where feed_id = ? and guid = ? limit 1"
|
|
|
|
|
+ feed-id guid))))
|
|
|
|
|
|
|
|
(defun db-rss-add-item (item)
|
|
(defun db-rss-add-item (item)
|
|
|
- (with-db (db)
|
|
|
|
|
- (sqlite:execute-non-query db "insert into rss_items (feed_id, guid, link, title, published) values (?, ?, ?, ?, ?)"
|
|
|
|
|
- (feed-id (feed-item-feed item))
|
|
|
|
|
- (feed-item-guid item)
|
|
|
|
|
- (feed-item-link item)
|
|
|
|
|
- (feed-item-title item)
|
|
|
|
|
- (feed-item-published-unix item))))
|
|
|
|
|
|
|
+ (let ((feed-id (feed-id (feed-item-feed item)))
|
|
|
|
|
+ (published (feed-item-published-unix item)))
|
|
|
|
|
+ (with-slots (guid link title) item
|
|
|
|
|
+ (with-db (db)
|
|
|
|
|
+ (sqlite:execute-non-query db "insert into rss_items (feed_id, guid, link, title, published) values (?, ?, ?, ?, ?)"
|
|
|
|
|
+ feed-id guid link title published)))))
|
|
|
|
|
|
|
|
(defun %make-feed-item (feed row)
|
|
(defun %make-feed-item (feed row)
|
|
|
(when row
|
|
(when row
|
|
@@ -172,6 +171,7 @@
|
|
|
:published (when (nth 3 row) (local-time:unix-to-timestamp (nth 3 row))))))
|
|
:published (when (nth 3 row) (local-time:unix-to-timestamp (nth 3 row))))))
|
|
|
|
|
|
|
|
(defun db-rss-last-feed-items (feed &optional (limit 10))
|
|
(defun db-rss-last-feed-items (feed &optional (limit 10))
|
|
|
- (with-db (db)
|
|
|
|
|
- (mapcar #'(lambda (row) (%make-feed-item feed row))
|
|
|
|
|
- (sqlite:execute-to-list db "select guid, link, title, published from rss_items where feed_id = ? order by published desc, id desc limit ?" (feed-id feed) limit))))
|
|
|
|
|
|
|
+ (with-slots (id) feed
|
|
|
|
|
+ (with-db (db)
|
|
|
|
|
+ (mapcar #'(lambda (row) (%make-feed-item feed row))
|
|
|
|
|
+ (sqlite:execute-to-list db "select guid, link, title, published from rss_items where feed_id = ? order by published desc, id desc limit ?" id limit)))))
|