refactoring
This commit is contained in:
+29
-5
@@ -15,7 +15,8 @@
|
||||
"library.rkt"
|
||||
"playlists.rkt")
|
||||
|
||||
(provide make-player
|
||||
(provide player?
|
||||
make-player
|
||||
player-state->jsexpr
|
||||
player-command!
|
||||
player-discover!
|
||||
@@ -73,9 +74,19 @@
|
||||
[volume #:mutable]
|
||||
[repeat #:mutable]
|
||||
[error #:mutable]
|
||||
local-music-indexes)
|
||||
local-music-indexes)
|
||||
#:transparent)
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; goal : Hold the shared libraries, playback sessions, outputs and UI state.
|
||||
; pre : make-player supplies all fields and owns construction of the value.
|
||||
; post : Creating or recognizing a player does not start an HTTP server.
|
||||
; result : player? recognizes values accepted by the internal server API.
|
||||
; internals: make-player initializes the state and command locks, playlist
|
||||
; contexts and playback sessions. player-command! mutates that
|
||||
; state, player-state->jsexpr reads it, and player-close! releases
|
||||
; the owned playback and persistence resources.
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
(struct player
|
||||
(libraries
|
||||
allowed-agent-ids
|
||||
@@ -373,6 +384,13 @@
|
||||
(λ ()
|
||||
(set-playback-session-error! session message))))
|
||||
|
||||
;;; Converts an internal error value to a JSON-compatible message or key.
|
||||
(define (error->jsexpr error)
|
||||
(cond
|
||||
((eq? error #f) 'null)
|
||||
((symbol? error) (symbol->string error))
|
||||
(else error)))
|
||||
|
||||
(define (clear-session-error! value session)
|
||||
(set-session-error! value session #f))
|
||||
|
||||
@@ -1372,9 +1390,9 @@
|
||||
'volume (playback-session-volume session)
|
||||
'repeat (symbol->string (playback-session-repeat session))
|
||||
'discovering (player-discovering? value)
|
||||
'error (or (playback-session-error session)
|
||||
(player-error value)
|
||||
'null))))))))
|
||||
'error (error->jsexpr
|
||||
(or (playback-session-error session)
|
||||
(player-error value))))))))))
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; goal : Execute one browser player command.
|
||||
@@ -1722,6 +1740,12 @@
|
||||
(require rackunit
|
||||
racket/file)
|
||||
|
||||
(check-equal? (error->jsexpr #f) 'null)
|
||||
(check-equal?
|
||||
(error->jsexpr 'dlna-renderer-unreachable)
|
||||
"dlna-renderer-unreachable")
|
||||
(check-equal? (error->jsexpr "technical error") "technical error")
|
||||
|
||||
(define root
|
||||
(make-temporary-file "rkt-web-player-~a" 'directory))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user