Make load-members create more complex structure.

This commit is contained in:
Dominik Pantůček 2023-04-04 22:39:45 +02:00
parent e25a75ab27
commit 78164ecafe

View file

@ -65,26 +65,29 @@
(define (load-members dn . opts) (define (load-members dn . opts)
(let ((progress? (and (not (null? opts)) (let ((progress? (and (not (null? opts))
(car opts)))) (car opts))))
(with-progress% (make-dict
progress? "members" `((members
(let* ((fss (load-members-dir dn)) .
(tot (sub1 (length (dict-keys fss)))) ,(with-progress%
(mb0 (dict-map progress? "members"
(lambda (symfn symlinks prg) (let* ((fss (load-members-dir dn))
(progress%-advance (/ prg tot)) (tot (sub1 (length (dict-keys fss))))
(members-dir-load-member dn (mb0 (dict-map
symfn (lambda (symfn symlinks prg)
symlinks)) (progress%-advance (/ prg tot))
fss)) (members-dir-load-member dn
(mb1 (dict-reduce (make-dict) symfn
(lambda (acc symfn mr) symlinks))
(dict-set acc (dict-ref mr 'id) mr)) fss))
mb0)) (mb1 (dict-reduce (make-dict)
(mb (dict-reduce '() (lambda (acc symfn mr)
(lambda (acc id mr) (dict-set acc (dict-ref mr 'id) mr))
(cons mr acc)) mb0))
mb1))) (mb (dict-reduce '()
mb)))) (lambda (acc id mr)
(cons mr acc))
mb1)))
mb)))))))
;; Gets member based by generic predicate ;; Gets member based by generic predicate
(define (find-member-by-predicate mb pred) (define (find-member-by-predicate mb pred)