ok
This commit is contained in:
+37
-4
@@ -101,12 +101,18 @@
|
||||
(define (request-username auth request)
|
||||
(or (auth-request-user auth request) "anonymous"))
|
||||
|
||||
;;; Returns the player state belonging to the requesting user.
|
||||
;;; Read the opaque version of the playlist already held by this browser.
|
||||
(define (request-playlist-version request)
|
||||
(let ((entry (assq 'playlistVersion (url-query (request-uri request)))))
|
||||
(and entry (cdr entry))))
|
||||
|
||||
;;; Returns user state, including tracks only when this browser needs them.
|
||||
(define (state-handler player auth request)
|
||||
(json-response
|
||||
(player-state->jsexpr
|
||||
player
|
||||
#:username (request-username auth request))))
|
||||
#:username (request-username auth request)
|
||||
#:playlist-version (request-playlist-version request))))
|
||||
|
||||
;;; Starts renderer discovery and returns the updated player state.
|
||||
(define (discover-handler player auth request)
|
||||
@@ -114,7 +120,8 @@
|
||||
(json-response
|
||||
(player-state->jsexpr
|
||||
player
|
||||
#:username (request-username auth request))))
|
||||
#:username (request-username auth request)
|
||||
#:playlist-version (request-playlist-version request))))
|
||||
|
||||
;;; Applies one player command for the requesting user.
|
||||
(define (command-handler player auth request command)
|
||||
@@ -125,7 +132,8 @@
|
||||
player
|
||||
command
|
||||
(request-jsexpr request)
|
||||
#:username (request-username auth request)))))
|
||||
#:username (request-username auth request)
|
||||
#:playlist-version (request-playlist-version request)))))
|
||||
|
||||
;;; Returns the persisted interface preferences for the requesting user.
|
||||
(define (preferences-handler player auth request)
|
||||
@@ -405,6 +413,31 @@
|
||||
(check-equal?
|
||||
(request-jsexpr (test-request #"POST" "/api/preferences"))
|
||||
(hasheq))
|
||||
(test-case "HTTP state and commands accept the browser's playlist version"
|
||||
(let* ((value (make-player '() #:playlist-keystore #f #:local-output? #f))
|
||||
(auth (make-auth-manager '()))
|
||||
(dispatch (make-dispatch value auth)))
|
||||
(dynamic-wind
|
||||
void
|
||||
(λ ()
|
||||
(let* ((full (response-jsexpr (dispatch (test-request #"GET" "/api/state"))))
|
||||
(version (hash-ref full 'playlistVersion))
|
||||
(compact
|
||||
(response-jsexpr
|
||||
(dispatch (test-request #"GET" (string-append "/api/state?playlistVersion=" version))))))
|
||||
(check-equal? (hash-ref full 'tracks) '())
|
||||
(check-eq? (hash-ref compact 'tracks) 'null)
|
||||
(check-equal? (hash-ref compact 'playlistVersion) version)
|
||||
(let ((renamed
|
||||
(response-jsexpr
|
||||
(dispatch
|
||||
(test-request #"POST"
|
||||
(string-append "/api/command/tab-rename?playlistVersion=" version)
|
||||
#:headers (list (header #"Content-Type" #"application/json"))
|
||||
#:body #"{\"index\":0,\"name\":\"Music\"}")))))
|
||||
(check-eq? (hash-ref renamed 'tracks) 'null)
|
||||
(check-equal? (hash-ref (car (hash-ref renamed 'tabs)) 'name) "Music"))))
|
||||
(λ () (player-close! value)))))
|
||||
(check-equal?
|
||||
(request-jsexpr
|
||||
(test-request #"POST"
|
||||
|
||||
Reference in New Issue
Block a user