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

106 lines
4.4 KiB
Racket

#lang racket/base
(require racket/file
racket/path
simple-ini
"util.rkt")
(provide manager-config?
manager-config-base-dir
manager-config-ini-file
manager-config-state-file
manager-config-log-file
manager-config-max-sample-rate
manager-config-hash-algorithm
manager-config-dry-run?
manager-config-display-log?
manager-config-compression-level
manager-config-mail-enabled?
manager-config-mail-send-on-success?
manager-config-mail-send-on-error?
manager-config-mail-host
manager-config-mail-port
manager-config-mail-tls?
manager-config-mail-username
manager-config-mail-password
manager-config-mail-from
manager-config-mail-to
manager-config-mail-cc
manager-config-mail-bcc
manager-config-mail-subject-prefix
load-manager-config
ensure-default-config!)
(struct manager-config
(base-dir ini-file state-file log-file max-sample-rate hash-algorithm dry-run?
display-log? compression-level mail-enabled? mail-send-on-success?
mail-send-on-error? mail-host mail-port mail-tls? mail-username
mail-password mail-from mail-to mail-cc mail-bcc mail-subject-prefix)
#:transparent)
(define (default-log-file base-dir)
(build-path base-dir ".flac-48khz-manager.log"))
(define (default-ini base-dir)
(build-path base-dir ".flac-48khz-manager.ini"))
(define (default-state base-dir)
(build-path base-dir ".music-info.db"))
(define (ensure-default-config! ini-file)
(unless (file-exists? ini-file)
(define ini (make-ini))
(ini-set! ini 'manager 'max-sample-rate 48000)
(ini-set! ini 'manager 'hash-algorithm "sha256")
(ini-set! ini 'manager 'dry-run #f)
(ini-set! ini 'manager 'display-log #t)
(ini-set! ini 'manager 'log-file ".flac-48khz-manager.log")
(ini-set! ini 'manager 'compression-level 5)
(ini-set! ini 'mail 'enabled #f)
(ini-set! ini 'mail 'send-on-success #f)
(ini-set! ini 'mail 'send-on-error #t)
(ini-set! ini 'mail 'host "")
(ini-set! ini 'mail 'port 25)
(ini-set! ini 'mail 'tls #f)
(ini-set! ini 'mail 'username "")
(ini-set! ini 'mail 'password "")
(ini-set! ini 'mail 'from "")
(ini-set! ini 'mail 'to "")
(ini-set! ini 'mail 'cc "")
(ini-set! ini 'mail 'bcc "")
(ini-set! ini 'mail 'subject-prefix "[flac-48khz-manager]")
(ini->file ini ini-file)))
(define (resolve-log-file base-dir v)
(define p (string-value v ".flac-48khz-manager.log"))
(cond [(path-string? p)
(define bp (string->path p))
(if (absolute-path? bp) bp (build-path base-dir bp))]
[else (default-log-file base-dir)]))
(define (load-manager-config base-dir*)
(define base-dir (simple-form-path base-dir*))
(define ini-file (default-ini base-dir))
(ensure-default-config! ini-file)
(define ini (file->ini ini-file))
(define log-file (resolve-log-file base-dir (ini-get ini 'manager 'log-file ".flac-48khz-manager.log")))
(manager-config base-dir ini-file (default-state base-dir) log-file
(int-value (ini-get ini 'manager 'max-sample-rate 48000) 48000)
(string-downcase (string-value (ini-get ini 'manager 'hash-algorithm "sha256") "sha256"))
(bool-value (ini-get ini 'manager 'dry-run #f) #f)
(bool-value (ini-get ini 'manager 'display-log #t) #t)
(int-value (ini-get ini 'manager 'compression-level 5) 5)
(bool-value (ini-get ini 'mail 'enabled #f) #f)
(bool-value (ini-get ini 'mail 'send-on-success #f) #f)
(bool-value (ini-get ini 'mail 'send-on-error #t) #t)
(string-value (ini-get ini 'mail 'host "") "")
(int-value (ini-get ini 'mail 'port 25) 25)
(bool-value (ini-get ini 'mail 'tls #f) #f)
(string-value (ini-get ini 'mail 'username "") "")
(string-value (ini-get ini 'mail 'password "") "")
(string-value (ini-get ini 'mail 'from "") "")
(split-addresses (ini-get ini 'mail 'to ""))
(split-addresses (ini-get ini 'mail 'cc ""))
(split-addresses (ini-get ini 'mail 'bcc ""))
(string-value (ini-get ini 'mail 'subject-prefix "[flac-48khz-manager]") "[flac-48khz-manager]")))