diff --git a/parenscript/front-page.lisp b/parenscript/front-page.lisp index 487999d..3492e0f 100644 --- a/parenscript/front-page.lisp +++ b/parenscript/front-page.lisp @@ -703,7 +703,11 @@ (setf (ps:@ (ps:chain btn (query-selector ".star-icon")) text-content) "☆") ;; Reload cache (don't call update-now-playing as it would ;; check the old cache before reload completes) - (load-favorites-cache)))) + (load-favorites-cache) + ;; Notify frame player to reload its cache + (let ((player-frame (ps:chain document (get-element-by-id "player-frame")))) + (when (and player-frame (ps:@ player-frame content-window)) + (ps:chain player-frame content-window (post-message "reload-favorites" "*"))))))) (catch (lambda (error) (ps:chain console (error "Error removing favorite:" error))))) ;; Add favorite @@ -723,7 +727,11 @@ (setf (ps:@ (ps:chain btn (query-selector ".star-icon")) text-content) "★") ;; Reload cache (don't call update-now-playing as it would ;; check the old cache before reload completes) - (load-favorites-cache)))) + (load-favorites-cache) + ;; Notify frame player to reload its cache + (let ((player-frame (ps:chain document (get-element-by-id "player-frame")))) + (when (and player-frame (ps:@ player-frame content-window)) + (ps:chain player-frame content-window (post-message "reload-favorites" "*"))))))) (catch (lambda (error) (ps:chain console (error "Error adding favorite:" error))))))))))) diff --git a/parenscript/stream-player.lisp b/parenscript/stream-player.lisp index 491daef..6dde88c 100644 --- a/parenscript/stream-player.lisp +++ b/parenscript/stream-player.lisp @@ -207,7 +207,7 @@ ;; Load user's favorites into cache (mini player) (defun load-favorites-cache-mini () (ps:chain - (fetch "/api/asteroid/user/favorites") + (fetch "/api/asteroid/user/favorites" (ps:create :credentials "include")) (then (lambda (response) (if (ps:@ response ok) (ps:chain response (json)) @@ -304,7 +304,7 @@ ;; Remove favorite (ps:chain (fetch (+ "/api/asteroid/user/favorites/remove?" params) - (ps:create :method "POST")) + (ps:create :method "POST" :credentials "include")) (then (lambda (response) (cond ((not (ps:@ response ok)) @@ -324,7 +324,7 @@ ;; Add favorite (ps:chain (fetch (+ "/api/asteroid/user/favorites/add?" params) - (ps:create :method "POST")) + (ps:create :method "POST" :credentials "include")) (then (lambda (response) (cond ((not (ps:@ response ok)) @@ -784,7 +784,13 @@ (init-persistent-player)) ;; Check for popout player (when (ps:chain document (get-element-by-id "live-audio")) - (init-popout-player)))))) + (init-popout-player)))) + ;; Listen for messages from parent frame (e.g., favorites cache reload) + (ps:chain window (add-event-listener + "message" + (lambda (event) + (when (= (ps:@ event data) "reload-favorites") + (load-favorites-cache-mini))))))) ) "Compiled JavaScript for stream player - generated at load time")