Files
audio-library-manager/private/flac2opus-state.rkt
T

55 lines
1.7 KiB
Racket

#lang racket/base
(require racket/list
keystore
"util.rkt")
(provide open-flac2opus-state
flac2opus-state-get-file
flac2opus-state-set-file!
flac2opus-state-drop-file!
flac2opus-state-known-relpaths)
(define prefix "flac2opus:file:")
(define (open-flac2opus-state state-file)
(ks-open state-file))
(define (file-state-key relpath)
(string-append prefix (normalize-relpath-string relpath)))
(define (legacy-file-state-key relpath)
(string-append prefix (legacy-backslash-relpath-string relpath)))
(define (ks-drop/quiet! ks key)
(with-handlers ([exn:fail? (lambda (_) (void))])
(ks-drop! ks key)))
(define (flac2opus-state-get-file ks relpath [default #f])
(define key (file-state-key relpath))
(define legacy-key (legacy-file-state-key relpath))
(define missing (gensym 'missing))
(define value (ks-get ks key missing))
(cond [(not (eq? value missing)) value]
[(equal? key legacy-key) default]
[else (ks-get ks legacy-key default)]))
(define (flac2opus-state-set-file! ks relpath value)
(define key (file-state-key relpath))
(define legacy-key (legacy-file-state-key relpath))
(ks-set! ks key value)
(unless (equal? key legacy-key) (ks-drop/quiet! ks legacy-key)))
(define (flac2opus-state-drop-file! ks relpath)
(define key (file-state-key relpath))
(define legacy-key (legacy-file-state-key relpath))
(ks-drop/quiet! ks key)
(unless (equal? key legacy-key) (ks-drop/quiet! ks legacy-key)))
(define (flac2opus-state-known-relpaths ks)
(remove-duplicates
(map (lambda (k)
(normalize-relpath-string (substring k (string-length prefix))))
(ks-keys-glob ks (string-append prefix "*")))
equal?))