iens

Manager of links to read
git clone https://git.instinctive.eu/iens.git
Log | Files | Refs | README | LICENSE

commit 5a5681481ac18438262cdbae498a03d2f11f4698
parent 3c441c68929e04f65de23c28ec83191e94a21af5
Author: Natasha Kerensikova <natgh@instinctive.eu>
Date:   Wed, 23 Sep 2026 18:38:26 +0000

Scheduling sleep is spread between each database transaction
Diffstat:
Msrc/get-gruiks.scm | 24+++++++++++++++++-------
1 file changed, 17 insertions(+), 7 deletions(-)

diff --git a/src/get-gruiks.scm b/src/get-gruiks.scm @@ -63,6 +63,12 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Gruik build from sources +(define (deadline-sleep deadline count) + (when deadline + (let ((rest (- deadline (current-seconds)))) + (when (positive? rest) + (secosleep (if (positive? count) (/ rest count) rest)))))) + (define (process-gruik source url title comm) (when (= 0 (exec (sql db "UPDATE gruik SET lastseen=CAST(strftime('%s', 'now') as INT), @@ -103,15 +109,16 @@ url)) 0 -1))))) -(define (process-atom source items) +(define (process-atom deadline source items) (unless (null? items) (process-gruik source (link-uri (car (entry-links (car items)))) (title-text (entry-title (car items))) #f) - (process-atom source (cdr items)))) + (deadline-sleep deadline (length items)) + (process-atom deadline source (cdr items)))) -(define (process-rss source items) +(define (process-rss deadline source items) (unless (null? items) (let* ((item (car items)) (attr (rss:item-attributes item)) @@ -119,7 +126,8 @@ (title (rss:item-title item)) (comm (alist-ref 'comments attr))) (process-gruik source link (if title title link) comm) - (process-rss source (cdr items))))) + (deadline-sleep deadline (length items)) + (process-rss deadline source (cdr items))))) (define (absorb-304 req parse) (condition-case @@ -193,7 +201,7 @@ (rss:item-title (rss:feed-channel dr)))) (else #f)))) -(define (process-source name url format last-modified etag) +(define (process-source deadline name url format last-modified etag) (condition-case (let ((data (case format ((0) (get-auto url)) ((1) (get-atom url last-modified etag)) @@ -201,6 +209,7 @@ (else #f)))) (if data (let ((args (list + (if (and deadline (not (null? deadline))) deadline #f) (if (string=? name url) (begin (exec (sql db "UPDATE source_rss SET name=? @@ -248,7 +257,7 @@ name,url,format,last_modified,etag FROM source_rss WHERE id = ?1;") index))) - (apply process-source (cdr arg)) + (apply process-source (cons deadline (cdr arg))) (let ((rest (- deadline (current-seconds)))) (when (positive? rest) (secosleep rest))) @@ -256,4 +265,5 @@ (loop (car arg) (add-period deadline))))) (query (for-each-row* process-source) - (sql db "SELECT name,url,format,last_modified,etag FROM source_rss;"))) + (sql db "SELECT NULL,name,url,format,last_modified,etag + FROM source_rss;")))