From bb970b6eb981b38d59f806ac5aecb8cb26288633 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Pant=C5=AF=C4=8Dek?= Date: Tue, 28 Mar 2023 11:55:14 +0200 Subject: [PATCH] Stream line highlights queries. --- bbstool.scm | 8 +++----- configuration.scm | 7 ------- member-record.scm | 21 +++++++++++++++++---- 3 files changed, 20 insertions(+), 16 deletions(-) diff --git a/bbstool.scm b/bbstool.scm index 7ab1878..a3bc5e3 100644 --- a/bbstool.scm +++ b/bbstool.scm @@ -67,13 +67,11 @@ CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. (-license () "Show licensing terms" (print license-text) (exit 0)) - (-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))) + (-members (dir) "Members base directory" (*members-directory* dir)) + (-context (n) "Member-File parser Error Context (lines)" (*member-file-context* (string->number n))) (-mi (id) "Specify member by id" (-member-id- (string->number id))) (-mn (nick) "Specify member by nick" (-member-nick- nick)) - (-pi () "Print information" (-action- 'print-info)) + (-info () "Print information" (-action- 'print-info)) (-stats (file:gnuplot-data) "Get stats for all months" (-action- 'print-stats) (-fname- file:gnuplot-data)) diff --git a/configuration.scm b/configuration.scm index 5bf834a..bb73b2a 100644 --- a/configuration.scm +++ b/configuration.scm @@ -30,7 +30,6 @@ ( *current-month* *member-file-context* - *member-file-check-syntax* *member-default-joined* *member-suspend-max-months* ) @@ -51,12 +50,6 @@ ;; Configuration of error reporting (define *member-file-context* (make-parameter 3)) - ;; Tolerance to formal errors (invalid key or key without value): - ;; 'error - show source and exits with error - ;; 'warning - show source and error, continue - ;; 'quiet - ignore - (define *member-file-check-syntax* (make-parameter 'error)) - ;; Default as specified by the original implementation if the 'joined ;; key is missing in member file. (define *member-default-joined* (make-parameter (make-month 2015 1))) diff --git a/member-record.scm b/member-record.scm index c193fd4..75c141e 100644 --- a/member-record.scm +++ b/member-record.scm @@ -44,7 +44,7 @@ member-record-info member-missing-keys member-highlights? - member-valid? + member-has-issues? member-destroyed? member-suspended? @@ -203,10 +203,23 @@ (define (member-highlights? mr) (dict-has-key? mr 'highlights)) + ;; Returns true if there is at least one highlight of given type + (define (member-highlights-has-type? mr type) + (let loop ((hls (dict-ref mr 'highlights '()))) + (if (null? hls) + #f + (if (eq? (cadddr (car hls)) type) + #t + (loop (cdr hls)))))) + + ;; Returns true if there is at least one highlight with error type + (define (member-has-errors? mr) + (member-highlights-has-type? mr 'error)) + ;; True if member record is OK - (define (member-valid? mr) - (and (not (member-highlights? mr)) - (is-4digit-prime? (member-id mr)))) + (define (member-has-issues? mr) + (or (member-has-errors? mr) + (not (is-4digit-prime? (member-id mr))))) ;; Returns true if the member record represents destroyed member. The ;; *current-month* is a global parameter from period module.