iens

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

commit 387eeade464331b784795acae0e24437a98bc860
parent b62c4ce674911c287ecec3476e2997f4f85e31ee
Author: Natasha Kerensikova <natgh@instinctive.eu>
Date:   Wed,  8 Apr 2026 18:59:07 +0000

Comment link in pre-filled gruik description
Diffstat:
Msrc/cgi.scm | 40+++++++++++++++++++++++++++++++++-------
Msrc/common.scm | 24++++++++++++++++++++++--
Msrc/iens.scm | 2+-
3 files changed, 56 insertions(+), 10 deletions(-)

diff --git a/src/cgi.scm b/src/cgi.scm @@ -19,6 +19,9 @@ (chicken string) (chicken time) comparse + openssl ; must be above http-client + http-client + rss sql-de-lite sxml-serializer) @@ -249,7 +252,7 @@ END-OF-CSS (include "common.scm") -(unless (= 3 (db-version)) +(unless (= 4 (db-version)) (die "Unexpectad database version")) @@ -307,6 +310,20 @@ END-OF-CSS (write-string location) (write-string "\r\n\r\n")) +(define (comment-link section url) + (let* ((rss-url (query fetch-value + (sql db "SELECT url FROM source_rss WHERE name=?;") + section))) + (if rss-url + (let ((rss (with-input-from-request rss-url #f rss:read))) + (let loop ((items (rss:feed-items rss))) + (cond + ((null? items) #f) + ((string=? url (rss:item-link (car items))) + (alist-ref 'comments (rss:item-attributes (car items)))) + (else (loop (cdr items)))))) + #f))) + (define (auto-descr id) (let ((row (query fetch-row (sql db "SELECT section,url FROM gruik @@ -314,12 +331,21 @@ END-OF-CSS id))) (unless (null? row) (let ((section (car row)) - (url (cadr row))) - (exec - (sql db "UPDATE gruik SET description=? - WHERE id=? AND COALESCE(description,'')='';") - (conc " + [](" url ")\n(via " section " sur #gcufeed)") - id))))) + (url (cadr row)) + (comm (apply comment-link row))) + (if comm + (exec + (sql db "UPDATE gruik + SET description=?,notes=trim(notes||char(10)||?,char(10)) + WHERE id=? AND COALESCE(description,'')='';") + (conc " + [](" url ")\n(via [" section "](" comm ") sur #gcufeed)") + comm + id) + (exec + (sql db "UPDATE gruik SET description=? + WHERE id=? AND COALESCE(description,'')='';") + (conc " + [](" url ")\n(via " section " sur #gcufeed)") + id)))))) (define (spinner-bar x y height beg) `(rect (@ (x ,x) (y ,y) (width 15) (height ,height) (rx 6)) diff --git a/src/common.scm b/src/common.scm @@ -60,7 +60,8 @@ mark INTEGER NOT NULL DEFAULT 0, ctime INTEGER NOT NULL, mtime INTEGER NOT NULL, - stime INTEGER);" + stime INTEGER, + entry_id INTEGER REFERENCES entry(id));" "CREATE UNIQUE INDEX i_gruik ON gruik(position);" "CREATE INDEX i_gruik_time ON gruik(ptime);" "CREATE TABLE gruik_tags @@ -68,7 +69,12 @@ tag_id REFERENCES tag(id) ON UPDATE CASCADE ON DELETE CASCADE);" "CREATE UNIQUE INDEX i_gruik_rel ON gruik_tags(gruik_id,tag_id);" "CREATE INDEX i_gruik_tags ON gruik_tags(tag_id,gruik_id);" - "PRAGMA user_version = 3;"))) + "CREATE TABLE source_rss + (id INTEGER PRIMARY KEY, + name TEXT NOT NULL, + url TEXT NOT NULL);" + "CREATE UNIQUE INDEX i_source_rss ON source_rss(name);" + "PRAGMA user_version = 4;"))) (when (= 0 (db-version)) (write-line "Updating database schema from v0 to v1") @@ -113,3 +119,17 @@ "CREATE UNIQUE INDEX i_gruik_rel ON gruik_tags(gruik_id,tag_id);" "CREATE INDEX i_gruik_tags ON gruik_tags(tag_id,gruik_id);" "PRAGMA user_version = 3;"))) + +(when (= 3 (db-version)) + (for-each + (lambda (s) (exec (sql/transient db s))) + (list "CREATE TABLE source_rss + (id INTEGER PRIMARY KEY, + name TEXT NOT NULL, + url TEXT NOT NULL);" + "CREATE UNIQUE INDEX i_source_rss ON source_rss(name);" + "INSERT INTO source_rss(name,url) VALUES + ('Hacker News','https://news.ycombinator.com/rss'), + ('Lobsters','https://lobste.rs/rss');" + "ALTER TABLE gruik ADD COLUMN entry_id INTEGER REFERENCES entry(id);" + "PRAGMA user_version = 4;"))) diff --git a/src/iens.scm b/src/iens.scm @@ -112,7 +112,7 @@ (include "common.scm") -(assert (= 3 (db-version))) +(assert (= 4 (db-version))) ;;;;;;;;;;;;;;;;;; ;; Configuration