Bettern cmap handling. Lots of changes.

This commit is contained in:
2026-08-17 23:06:23 +02:00
parent 8997f7f94a
commit 12f1ed2764
27 changed files with 10351 additions and 217 deletions
+32 -12
View File
@@ -18,28 +18,48 @@
(define (attachment-rows db)
(query-rows db
#<<SQL
SELECT a.id, p.slug, a.stored_name, p.namespace
SELECT a.id, a.page_id, a.stored_name
FROM attachments a
JOIN pages p ON p.id = a.page_id
ORDER BY a.id
SQL
))
(define (attachment-url slug stored-name)
(format "/uploads/~a/~a" slug stored-name))
(define (attachment-url reference stored-name)
(format "/uploads/~a/~a" reference stored-name))
(define (page-references db page-id)
(define current
(query-row db
"SELECT namespace, slug FROM pages WHERE id = $1"
page-id))
(define references
(list (if (string=? (vector-ref current 0) "")
(vector-ref current 1)
(string-append (vector-ref current 0) ":" (vector-ref current 1)))))
(define aliases-available?
(query-value db "SELECT to_regclass('page_aliases') IS NOT NULL"))
(when aliases-available?
(for ((row (in-list
(query-rows db
"SELECT namespace, slug FROM page_aliases WHERE page_id = $1 ORDER BY id"
page-id))))
(define reference
(if (string=? (vector-ref row 0) "")
(vector-ref row 1)
(string-append (vector-ref row 0) ":" (vector-ref row 1))))
(set! references (cons reference references))))
references)
(define (record-references! db page-id page-version-id markdown current? referenced-at)
(for ((row (in-list (attachment-rows db))))
(define attachment-id (vector-ref row 0))
(define slug (vector-ref row 1))
(define owner-page-id (vector-ref row 1))
(define stored-name (vector-ref row 2))
(define namespace (vector-ref row 3))
(define reference (if (string=? namespace "") slug (string-append namespace ":" slug)))
(define current-url (attachment-url reference stored-name))
(define legacy-url (attachment-url slug stored-name))
(when (or (string-contains? markdown current-url)
(and (not (string=? namespace ""))
(string-contains? markdown legacy-url)))
(define found? #f)
(for ((reference (in-list (page-references db owner-page-id))))
(when (string-contains? markdown (attachment-url reference stored-name))
(set! found? #t)))
(when found?
(query-exec db
#<<SQL
INSERT INTO attachment_references