Innocenty Enikeew 10 lat temu
rodzic
commit
06f883bece
1 zmienionych plików z 4 dodań i 4 usunięć
  1. 4 4
      rss.lisp

+ 4 - 4
rss.lisp

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