56 lines
1.6 KiB
Racket
56 lines
1.6 KiB
Racket
#lang racket/base
|
|
|
|
(require racket/list
|
|
keystore
|
|
"util.rkt")
|
|
|
|
(provide open-manager-state
|
|
file-state-key
|
|
state-get-file
|
|
state-set-file!
|
|
state-drop-file!
|
|
state-known-relpaths)
|
|
|
|
(define prefix "flac-48khz:file:")
|
|
|
|
(define (open-manager-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 (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 (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 (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 (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?))
|