#lang racket/base (require racket/class "../library-cfg.rkt" "../../misc/utils.rkt") (provide media-library%) (define media-library% (class object% (init-field cfg) (check/c media-library% cfg (is-a?/c library-cfg%)) (define cfg-revision -1) (define root-container #f) (define/private (reset-if-needed!) (let ((current-revision (send cfg get-revision))) (unless (= cfg-revision current-revision) (set! cfg-revision current-revision) (set! root-container #f)))) (define/public (get-cfg) cfg) (define/public (get-id) (send cfg get-id)) (define/public (get-kind) (send cfg get-kind)) (define/public (get-kind-version) (send cfg get-kind-version)) (define/public (get-root-container) (reset-if-needed!) (when (eq? root-container #f) (set! root-container (send this make-root-container))) root-container) (abstract make-root-container) (super-new)))