iens

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

commit cd2633e28a3445cdd51f1df19bab033e8f874f51
parent 55b507cdf8d001930076bc350e0a2956383ac6d4
Author: Natasha Kerensikova <natgh@instinctive.eu>
Date:   Thu, 14 May 2026 18:56:35 +0000

Feed updates are reported in gruik push response
Diffstat:
Msrc/cgi.scm | 52+++++++++++++++++++++++++++++++++++++++++++++-------
1 file changed, 45 insertions(+), 7 deletions(-)

diff --git a/src/cgi.scm b/src/cgi.scm @@ -736,19 +736,57 @@ END-OF-CSS (define (fragment-diff-sel-counts before after) (let ((diff (diff-sel-counts before after))) (if (null? diff) '() + `((table + ,@(map (lambda (line) + (cons 'tr (map (lambda (v) (list 'td (->string v))) line))) + diff)))))) + +(define (feed-sig-base) + (query (map-rows (lambda (row) (append row (build-signature (caddr row))))) + (sql db "SELECT id,title,selector FROM feed WHERE active=1;"))) +(define (fragment-sig-diff id title diff) + `((p ,(conc "Feed #" id ": " title)) + (ul ,@(map (lambda (hunk) (cond + ((eqv? (car hunk) 'add) + `(li ,(conc "added item #" (cadr hunk) + " at " (rfc-3339 (caddr hunk))))) + ((eqv? (car hunk) 'del) + `(li ,(conc "removed item #" (cadr hunk) + " at " (rfc-3339 (caddr hunk))))) + ((eqv? (car hunk) 'chg) + `(li ,(conc "updated item #" (cadr hunk) + " from " (rfc-3339 (caddr hunk)) + " to " (rfc-3339 (cadddr hunk))))) + (else `(li ,(conc "malformed hunk: " hunk))))) + diff)))) +(define (fragment-diff-feed* base-sig) + (let ((id (car base-sig)) + (title (cadr base-sig)) + (selector (caddr base-sig)) + (old-sig (cdddr base-sig))) + (let ((diff (diff-signature old-sig (build-signature selector)))) + (if (null? diff) + '() + (fragment-sig-diff id title diff))))) +(define (fragment-diff-feed base-sigs) + (join (map fragment-diff-feed* base-sigs))) + +(define (fragment-push-report frag-diff-sel frag-diff-sig) + (if (and (null? frag-diff-sel) (null? frag-diff-sig)) + '() `(form - (table (@ (class "form-body")) - ,@(map (lambda (line) - (cons 'tr (map (lambda (v) (list 'td (->string v))) line))) - diff)) + (div (@ (class "form-body")) ,@frag-diff-sel ,@frag-diff-sig) (button (@ (class rsub) (onclick "this.closest('form').remove()")) - "Dismiss"))))) + "Dismiss")))) (define (htmx-push-gruik id) - (let ((before (db-sel-counts))) + (let ((before (db-sel-counts)) + (base-sigs (feed-sig-base))) (db-push-gruik id) (htmx-output - (fragment-diff-sel-counts before (db-sel-counts))))) + (fragment-push-report + (fragment-diff-sel-counts before (db-sel-counts)) + (fragment-diff-feed base-sigs))))) (define (xdo-edit) (let ((id (db-edit)))