Load members, find them by id or nick.

This commit is contained in:
Dominik Pantůček 2023-03-16 12:04:51 +01:00
parent a38992edf7
commit dbb7ab7fd8
2 changed files with 62 additions and 18 deletions

View file

@ -52,6 +52,9 @@
;; Command-line options and configurable parameters ;; Command-line options and configurable parameters
(define *members-directory* (make-parameter "members")) (define *members-directory* (make-parameter "members"))
(define -member-id- (make-parameter #f))
(define -member-nick- (make-parameter #f))
(define -action- (make-parameter #f))
;; Arguments parsing ;; Arguments parsing
(command-line (command-line
@ -65,11 +68,20 @@
(-MB (dir) "Members base directory" (*members-directory* dir)) (-MB (dir) "Members base directory" (*members-directory* dir))
(-mfkw () "Member-File invalid Key Warning" (*member-file-check-syntax* 'warning)) (-mfkw () "Member-File invalid Key Warning" (*member-file-check-syntax* 'warning))
(-mfkq () "Member-File invalid Key Quiet" (*member-file-check-syntax* 'quiet)) (-mfkq () "Member-File invalid Key Quiet" (*member-file-check-syntax* 'quiet))
(-mfec (n) "Member-File parser Error Context (lines)" (*member-file-context* (string->number n)))) (-mfec (n) "Member-File parser Error Context (lines)" (*member-file-context* (string->number n)))
(-mi (id) "Specif member by id" (-member-id- (string->number id)))
(-mn (nick) "Specify member by nick" (-member-nick- nick))
)
;; Load the members database (required for everything anyway) ;; Load the members database (required for everything anyway)
(define MB (load-members "members" #t)) (define MB (load-members (*members-directory*) #t))
(print MB)
;; If a member is specified by either id or nick, get its record
(define mr (if (-member-id-)
(find-member-by-id MB (-member-id-))
(if (-member-nick-)
(find-member-by-nick (-member-nick-))
#f)))
;; ... ;; ...
(void) (void)

View file

@ -29,6 +29,10 @@
members-base members-base
( (
load-members load-members
find-member-by-id
find-member-by-nick
list-members-ids
list-members-nicks
members-base-tests! members-base-tests!
) )
@ -162,32 +166,60 @@
(files+symlinks->files-dictionary (files+symlinks->files-dictionary
(get-files+symlinks dn)))) (get-files+symlinks dn))))
(mb0 (dict-map (mb0 (dict-map
(lambda (symfn symlinks) (lambda (symfn symlinks)
(when progress? (when progress?
(display ".")) (display "."))
(members-base-load-member dn (members-base-load-member dn
symfn symfn
symlinks)) symlinks))
fss)) fss))
(mb (dict-reduce (make-dict) (mb1 (dict-reduce (make-dict)
(lambda (acc symfn mr) (lambda (acc symfn mr)
(dict-set acc (dict-ref mr 'id) mr)) (dict-set acc (dict-ref mr 'id) mr))
mb0))) mb0))
(mb (dict-reduce '()
(lambda (acc id mr)
(cons mr acc))
mb1)))
(when progress? (when progress?
(print " ok.")) (print " ok."))
mb))) mb)))
;; Gets member based by generic predicate
(define (find-member-by-predicate mb pred)
(let loop ((mdb mb))
(if (null? mdb)
#f
(let ((mr (car mdb)))
(if (pred mr)
mr
(loop (cdr mdb)))))))
;; Returns member record found by id
(define (find-member-by-id mb id) (define (find-member-by-id mb id)
#f) (find-member-by-predicate
mb
(lambda (mr)
(eq? (dict-ref mr 'id) id))))
;; Returns member record found by id
(define (find-member-by-nick mb nick) (define (find-member-by-nick mb nick)
#f) (find-member-by-predicate
mb
(lambda (mr)
(equal?
(dict-ref
(dict-ref mr 'info)
'nick)
nick))))
;; Returns all ids found in the database
(define (list-members-ids mb) (define (list-members-ids mb)
#f) (map (lambda (mr) (dict-ref mr 'id)) mb))
;; Returns all nicks found in the database
(define (list-members-nicks mb) (define (list-members-nicks mb)
#f) (map (lambda (mr) (dict-ref (dict-ref mr 'info) 'nick)) mb))
;; Performs self-tests of this module. ;; Performs self-tests of this module.
(define (members-base-tests!) (define (members-base-tests!)