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:
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