iens

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

commit 55b507cdf8d001930076bc350e0a2956383ac6d4
parent 565d4f8e09e8822a2a53661cb2b835ecc1811f1e
Author: Natasha Kerensikova <natgh@instinctive.eu>
Date:   Wed, 13 May 2026 17:59:14 +0000

Feed comparison primitives are shared
Diffstat:
Msrc/common.scm | 41+++++++++++++++++++++++++++++++++++++++++
Msrc/iens.scm | 38--------------------------------------
2 files changed, 41 insertions(+), 38 deletions(-)

diff --git a/src/common.scm b/src/common.scm @@ -254,3 +254,44 @@ (sql/transient db (string-append "SELECT id,url,type,description, notes,ptime,ctime,mtime FROM entry " selector ";")))) + +;;;;;;;;;;;;;;;;;;; +;; Feed Utilities + +(define (build-signature selector) + (query fetch-rows + (sql db (string-append "SELECT id,mtime FROM entry " selector ";")))) + +(define (car< a b) (< (car a) (car b))) + +(define (diff-signature old-sig new-sig) + (let loop ((old (sort old-sig car<)) + (new (sort new-sig car<)) + (result '())) + (cond ((and (null? old) (null? new)) + result) + ((null? old) + (loop old + (cdr new) + (cons `(add ,@(car new)) result))) + ((null? new) + (loop (cdr old) + new + (cons `(del ,@(car old)) result))) + ((equal? (car new) (car old)) + (loop (cdr old) + (cdr new) + result)) + ((= (caar new) (caar old)) + (loop (cdr old) + (cdr new) + (cons `(chg ,@(car old) ,(cadar new)) result))) + ((< (caar new) (caar old)) + (loop old + (cdr new) + (cons `(add ,@(car new)) result))) + ((> (caar new) (caar old)) + (loop (cdr old) + new + (cons `(del ,@(car old)) result))) + (else (assert #f "Should be unreachable"))))) diff --git a/src/iens.scm b/src/iens.scm @@ -261,44 +261,6 @@ ;; Feed Caching -(define (build-signature selector) - (query fetch-rows - (sql db (string-append "SELECT id,mtime FROM entry " selector ";")))) - -(define (car< a b) (< (car a) (car b))) - -(define (diff-signature old-sig new-sig) - (let loop ((old (sort old-sig car<)) - (new (sort new-sig car<)) - (result '())) - (cond ((and (null? old) (null? new)) - result) - ((null? old) - (loop old - (cdr new) - (cons `(add ,@(car new)) result))) - ((null? new) - (loop (cdr old) - new - (cons `(del ,@(car old)) result))) - ((equal? (car new) (car old)) - (loop (cdr old) - (cdr new) - result)) - ((= (caar new) (caar old)) - (loop (cdr old) - (cdr new) - (cons `(chg ,@(car old) ,(cadar new)) result))) - ((< (caar new) (caar old)) - (loop old - (cdr new) - (cons `(add ,@(car new)) result))) - ((> (caar new) (caar old)) - (loop (cdr old) - new - (cons `(del ,@(car old)) result))) - (else (assert #f "Should be unreachable"))))) - (define (write-diff sig-diff) (for-each (lambda (hunk)