Put loading all together.

This commit is contained in:
Dominik Pantůček 2023-03-11 17:42:18 +01:00
parent 4e97d6f4da
commit 88768aae8c

View file

@ -298,43 +298,7 @@
(print " ok."))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Members database
;; Loads all symlinks from (*members-directory*) returning a list of
;; pairs (name . destination)
(define (load-members-raw-index)
(let loop ((fns (directory (*members-directory*)))
(rs '()))
(if (null? fns)
rs
(let* ((fn (car fns))
(ffn (make-pathname (*members-directory*) fn))
(sl (if (symbolic-link? ffn) (read-symbolic-link ffn) #f)))
(loop (cdr fns)
(if sl
(cons (cons fn sl) rs)
rs))))))
;; Converts the raw members index to a list of dictionaries with keys
;; 'id, 'name and 'file. File names are without directory element.
(define (expand-members-raw-index ri)
(let loop ((ri ri)
(ds '()))
(if (null? ri)
ds
(let* ((mp (car ri))
(lnk (car mp))
(dfn (cdr mp))
(lnkn (string->number lnk))
(dfnn (string->number dfn))
(id (or dfnn lnkn))
(name (if lnkn dfn lnk)))
(loop (cdr ri)
(cons (list (cons 'id id)
(cons 'name name)
(cons 'file dfn))
ds))))))
;; Member info data file
;; Parses given key-value line. Key is up to first space, value is the
;; rest of the line. If the line doesn't contain anything, returns #f.
@ -408,6 +372,71 @@
(ls (read-lines f)))
(parse-member-lines ls)))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Members database
;; Loads all symlinks from (*members-directory*) returning a list of
;; pairs (name . destination)
(define (load-members-raw-index)
(let loop ((fns (directory (*members-directory*)))
(rs '()))
(if (null? fns)
rs
(let* ((fn (car fns))
(ffn (make-pathname (*members-directory*) fn))
(sl (if (symbolic-link? ffn) (read-symbolic-link ffn) #f)))
(loop (cdr fns)
(if sl
(cons (cons fn sl) rs)
rs))))))
;; Converts the raw members index to a list of dictionaries with keys
;; 'id, 'name and 'file. File names are without directory element.
(define (expand-members-raw-index ri)
(let loop ((ri ri)
(ds '()))
(if (null? ri)
ds
(let* ((mp (car ri))
(lnk (car mp))
(dfn (cdr mp))
(lnkn (string->number lnk))
(dfnn (string->number dfn))
(id (or dfnn lnkn))
(name (if lnkn dfn lnk)))
(loop (cdr ri)
(cons (list (cons 'id id)
(cons 'name name)
(cons 'file dfn))
ds))))))
(define (load-members-from-expanded-index ei)
(let loop ((ei ei)
(mdb '()))
(if (null? ei)
mdb
(let ((mi (car ei)))
(print mi)
(loop (cdr ei)
(cons (dict-set mi
'info
(load-member-file (dict-ref mi 'file)))
mdb))))))
;; Loads all member information from given members database.
(define (load-members)
(expand-members-raw-index
(load-members-raw-index)))
(define (find-member-by-id mb id)
#f)
(define (find-member-by-fname mb fname)
#f)
(define (find-member-by-nick mb nick)
#f)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Run everything
@ -424,6 +453,6 @@
(newline)
;; Perform requested action
;(print (expand-members-raw-index (load-members-raw-index)))
(load-members-from-expanded-index (expand-members-raw-index (load-members-raw-index)))
(print (load-member-file "trimen"))