feat: Sync favorites between front page and frame player via postMessage

This commit is contained in:
glenneth 2025-12-27 22:09:40 +03:00 committed by Brian O'Reilly
parent 2effe3bdef
commit ccce10db50
2 changed files with 20 additions and 6 deletions

View File

@ -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)))))))))))

View File

@ -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")