#lang racket/base (require racket/string keystore) (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 relpath)) (define (state-get-file ks relpath [default #f]) (ks-get ks (file-state-key relpath) default)) (define (state-set-file! ks relpath value) (ks-set! ks (file-state-key relpath) value)) (define (state-drop-file! ks relpath) (ks-drop! ks (file-state-key relpath))) (define (state-known-relpaths ks) (map (lambda (k) (substring k (string-length prefix))) (ks-keys-glob ks (string-append prefix "*"))))