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
(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
(command-line
@ -65,11 +68,20 @@
(-MB (dir) "Members base directory" (*members-directory* dir))
(-mfkw () "Member-File invalid Key Warning" (*member-file-check-syntax* 'warning))
(-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)
(define MB (load-members "members" #t))
(print MB)
(define MB (load-members (*members-directory*) #t))
;; 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)

View file

@ -29,6 +29,10 @@
members-base
(
load-members
find-member-by-id
find-member-by-nick
list-members-ids
list-members-nicks
members-base-tests!
)
@ -169,25 +173,53 @@
symfn
symlinks))
fss))
(mb (dict-reduce (make-dict)
(mb1 (dict-reduce (make-dict)
(lambda (acc symfn mr)
(dict-set acc (dict-ref mr 'id) mr))
mb0)))
mb0))
(mb (dict-reduce '()
(lambda (acc id mr)
(cons mr acc))
mb1)))
(when progress?
(print " ok."))
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)
#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)
#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)
#f)
(map (lambda (mr) (dict-ref mr 'id)) mb))
;; Returns all nicks found in the database
(define (list-members-nicks mb)
#f)
(map (lambda (mr) (dict-ref (dict-ref mr 'info) 'nick)) mb))
;; Performs self-tests of this module.
(define (members-base-tests!)