refactoring

This commit is contained in:
2026-09-01 09:31:49 +02:00
parent b3a5a0b345
commit a5a53b7efc
20 changed files with 2082 additions and 1032 deletions
+29 -5
View File
@@ -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))