From 88768aae8ca33abe2b0fcefa9df114a8a38ae1bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Pant=C5=AF=C4=8Dek?= Date: Sat, 11 Mar 2023 17:42:18 +0100 Subject: [PATCH] Put loading all together. --- brmsaptool.scm | 105 +++++++++++++++++++++++++++++++------------------ 1 file changed, 67 insertions(+), 38 deletions(-) diff --git a/brmsaptool.scm b/brmsaptool.scm index f7a3388..2cfb260 100644 --- a/brmsaptool.scm +++ b/brmsaptool.scm @@ -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"))