#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]")))