diff --git a/asteroid.lisp b/asteroid.lisp index 7f61005..d42def2 100644 --- a/asteroid.lisp +++ b/asteroid.lisp @@ -21,6 +21,17 @@ (defparameter *supported-formats* '("mp3" "flac" "ogg" "wav")) (defparameter *stream-base-url* "http://localhost:8000") +(defun get-stream-base-url () + "Get the stream base URL, using the request host if available" + (if (boundp 'radiance:*request*) + (let* ((host (or (header "Host") "localhost:8080")) + ;; Remove port if present and add :8000 + (host-without-port (if (position #\: host) + (subseq host 0 (position #\: host)) + host))) + (format nil "http://~a:8000" host-without-port)) + *stream-base-url*)) + ;; Configure JSON as the default API format (define-api-format json (data) "JSON API format for Radiance" @@ -528,8 +539,8 @@ :status-message "🟢 LIVE - Broadcasting asteroid music for hackers" :listeners "0" :stream-quality "128kbps MP3" - :stream-base-url *stream-base-url* - :default-stream-url (concatenate 'string *stream-base-url* "/asteroid.aac") + :stream-base-url (get-stream-base-url) + :default-stream-url (concatenate 'string (get-stream-base-url) "/asteroid.aac") :default-stream-encoding "audio/aac" :default-stream-encoding-desc "AAC 96kbps Stereo" :now-playing-artist "The Void" @@ -558,7 +569,7 @@ :status-message "🟢 LIVE - Broadcasting asteroid music for hackers" :listeners "0" :stream-quality "128kbps MP3" - :stream-base-url *stream-base-url* + :stream-base-url (get-stream-base-url) :now-playing-artist "The Void" :now-playing-track "Silence" :now-playing-album "Startup Sounds" @@ -571,8 +582,8 @@ (asdf:system-source-directory :asteroid)))) (clip:process-to-string (plump:parse (alexandria:read-file-into-string template-path)) - :stream-base-url *stream-base-url* - :default-stream-url (concatenate 'string *stream-base-url* "/asteroid.aac") + :stream-base-url (get-stream-base-url) + :default-stream-url (concatenate 'string (get-stream-base-url) "/asteroid.aac") :default-stream-encoding "audio/aac"))) ;; Configure static file serving for other files @@ -622,8 +633,8 @@ :icecast-status (check-icecast-status) :track-count (format nil "~d" track-count) :library-path "/home/glenn/Projects/Code/asteroid/music/library/" - :stream-base-url *stream-base-url* - :default-stream-url (concatenate 'string *stream-base-url* "/asteroid.aac")))) + :stream-base-url (get-stream-base-url) + :default-stream-url (concatenate 'string (get-stream-base-url) "/asteroid.aac")))) ;; User Management page (requires authentication) (define-page users-management #@"/admin/user" () @@ -867,8 +878,8 @@ (clip:process-to-string (plump:parse (alexandria:read-file-into-string template-path)) :title "Asteroid Radio - Web Player" - :stream-base-url *stream-base-url* - :default-stream-url (concatenate 'string *stream-base-url* "/asteroid.aac") + :stream-base-url (get-stream-base-url) + :default-stream-url (concatenate 'string (get-stream-base-url) "/asteroid.aac") :bitrate "128kbps MP3" :now-playing-artist "The Void" :now-playing-track "Silence" @@ -883,8 +894,8 @@ (clip:process-to-string (plump:parse (alexandria:read-file-into-string template-path)) :title "Asteroid Radio - Web Player" - :stream-base-url *stream-base-url* - :default-stream-url (concatenate 'string *stream-base-url* "/asteroid.aac") + :stream-base-url (get-stream-base-url) + :default-stream-url (concatenate 'string (get-stream-base-url) "/asteroid.aac") :default-stream-encoding "audio/aac"))) (define-page popout-player #@"/popout-player" () @@ -893,8 +904,8 @@ (asdf:system-source-directory :asteroid)))) (clip:process-to-string (plump:parse (alexandria:read-file-into-string template-path)) - :stream-base-url *stream-base-url* - :default-stream-url (concatenate 'string *stream-base-url* "/asteroid.aac") + :stream-base-url (get-stream-base-url) + :default-stream-url (concatenate 'string (get-stream-base-url) "/asteroid.aac") :default-stream-encoding "audio/aac"))) (define-api asteroid/status () ()