|
|
@@ -4,7 +4,7 @@
|
|
|
(defstruct feed-item guid link title description published)
|
|
|
|
|
|
(defparameter *rss-min-period* 60 "Min rss refresh period in seconds")
|
|
|
-(defparameter *rss-max-period* 600 "Min rss refresh period in seconds")
|
|
|
+(defparameter *rss-max-period* 1800 "Max rss refresh period in seconds")
|
|
|
(defparameter *rss-change-rate* 0.1 "Refresh period adjustment rata")
|
|
|
|
|
|
(defun http-default (url)
|
|
|
@@ -39,14 +39,14 @@
|
|
|
(dex:get url :force-binary t) :external-format :utf-8))))
|
|
|
(make-feed :url url :title (child-text root "title"))))
|
|
|
|
|
|
-(defun adjust-period (feed had-new?)
|
|
|
+(defun adjust-period (feed coeff)
|
|
|
"Adjust the period of feed based on whenever there were new items. With clamping"
|
|
|
(let* ((p (feed-period feed))
|
|
|
(diff (round (* p *rss-change-rate*))))
|
|
|
(setf (feed-period feed)
|
|
|
(min *rss-max-period*
|
|
|
(max *rss-min-period*
|
|
|
- (if had-new? (- p diff) (+ p diff)))))))
|
|
|
+ (- p (* coeff diff)))))))
|
|
|
|
|
|
(defun need-fetch-p (feed)
|
|
|
(or (null (feed-next-fetch feed))
|
|
|
@@ -58,7 +58,7 @@
|
|
|
unless (member (feed-item-guid item) (feed-seen-guids feed) :test #'equal)
|
|
|
do (pushnew (feed-item-guid item) (feed-seen-guids feed) :test #'equal)
|
|
|
and collect item)))
|
|
|
- (adjust-period feed (consp items))
|
|
|
+ (adjust-period feed (if (consp items) (length items) -1))
|
|
|
(setf (feed-next-fetch feed)
|
|
|
(local-time:timestamp+ (local-time:now)
|
|
|
(feed-period feed)
|