Files
audio-library-manager/private/util.rkt
T
2026-06-08 17:20:12 +02:00

66 lines
1.9 KiB
Racket

#lang racket/base
(require racket/file
racket/list
racket/path
racket/string)
(provide bool-value
int-value
string-value
split-addresses
relpath-string
flac-path?
ensure-parent-directory!
alist-ref/default
alist-set)
(define (bool-value v [default #f])
(cond [(boolean? v) v]
[(number? v) (not (zero? v))]
[(string? v)
(define s (string-downcase (string-trim v)))
(cond [(member s '("#t" "true" "yes" "y" "1" "on")) #t]
[(member s '("#f" "false" "no" "n" "0" "off" "")) #f]
[else default])]
[else default]))
(define (int-value v [default 0])
(cond [(integer? v) v]
[(number? v) (inexact->exact (round v))]
[(string? v) (or (string->number (string-trim v)) default)]
[else default]))
(define (string-value v [default ""])
(cond [(string? v) v]
[(symbol? v) (symbol->string v)]
[(number? v) (number->string v)]
[(boolean? v) (if v "#t" "#f")]
[(not v) default]
[else (format "~a" v)]))
(define (split-addresses v)
(define s (string-value v ""))
(filter (lambda (x) (not (string=? x "")))
(map string-trim (regexp-split #px"[,;]" s))))
(define (relpath-string base p)
(path->string (find-relative-path (simple-form-path base) (simple-form-path p))))
(define (flac-path? p)
(and (file-exists? p)
(let-values ([(base name dir?) (split-path p)])
(and (path? name)
(string-ci=? (bytes->string/utf-8 (or (path-get-extension name) #"")) ".flac")))))
(define (ensure-parent-directory! p)
(define-values (base name dir?) (split-path p))
(when (path? base) (make-directory* base)))
(define (alist-ref/default a k [default #f])
(define e (assoc k a))
(if e (cdr e) default))
(define (alist-set a k v)
(cons (cons k v) (filter (lambda (e) (not (equal? (car e) k))) a)))