Load members, find them by id or nick.
This commit is contained in:
parent
a38992edf7
commit
dbb7ab7fd8
2 changed files with 62 additions and 18 deletions
|
@ -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)
|
||||
|
|
|
@ -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!
|
||||
)
|
||||
|
||||
|
@ -162,32 +166,60 @@
|
|||
(files+symlinks->files-dictionary
|
||||
(get-files+symlinks dn))))
|
||||
(mb0 (dict-map
|
||||
(lambda (symfn symlinks)
|
||||
(when progress?
|
||||
(display "."))
|
||||
(members-base-load-member dn
|
||||
symfn
|
||||
symlinks))
|
||||
fss))
|
||||
(mb (dict-reduce (make-dict)
|
||||
(lambda (acc symfn mr)
|
||||
(dict-set acc (dict-ref mr 'id) mr))
|
||||
mb0)))
|
||||
(lambda (symfn symlinks)
|
||||
(when progress?
|
||||
(display "."))
|
||||
(members-base-load-member dn
|
||||
symfn
|
||||
symlinks))
|
||||
fss))
|
||||
(mb1 (dict-reduce (make-dict)
|
||||
(lambda (acc symfn mr)
|
||||
(dict-set acc (dict-ref mr 'id) mr))
|
||||
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!)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue