Merge main into experiment/parenscript-conversion
- Resolved conflicts in asteroid.asd (kept parenscript dependency) - Resolved conflicts in build-asteroid.lisp (took new bootstrap structure) - Includes all upstream changes: uri-path fix, profile redirect fix, curated playlist, build improvements
This commit is contained in:
commit
e31789704d
1
Makefile
1
Makefile
|
|
@ -3,6 +3,7 @@ PACKAGE=asteroid
|
||||||
PACKAGEUTILS=asteroid.app-utils
|
PACKAGEUTILS=asteroid.app-utils
|
||||||
OUT=asteroid
|
OUT=asteroid
|
||||||
ENTRY=-main
|
ENTRY=-main
|
||||||
|
BROWN_MM="Nil"
|
||||||
|
|
||||||
.PHONY: $(OUT)
|
.PHONY: $(OUT)
|
||||||
$(OUT): clean
|
$(OUT): clean
|
||||||
|
|
|
||||||
17
asteroid.asd
17
asteroid.asd
|
|
@ -11,25 +11,28 @@
|
||||||
:class "radiance:virtual-module"
|
:class "radiance:virtual-module"
|
||||||
:depends-on (:slynk
|
:depends-on (:slynk
|
||||||
:lparallel
|
:lparallel
|
||||||
|
:alexandria
|
||||||
|
:cl-json
|
||||||
:radiance
|
:radiance
|
||||||
:i-log4cl
|
|
||||||
:r-clip
|
|
||||||
:r-simple-rate
|
|
||||||
:r-simple-profile
|
|
||||||
:lass
|
:lass
|
||||||
:parenscript
|
:parenscript
|
||||||
:cl-json
|
|
||||||
:alexandria
|
|
||||||
:local-time
|
:local-time
|
||||||
:taglib
|
:taglib
|
||||||
:r-data-model
|
|
||||||
:ironclad
|
:ironclad
|
||||||
:babel
|
:babel
|
||||||
:cl-fad
|
:cl-fad
|
||||||
:bordeaux-threads
|
:bordeaux-threads
|
||||||
:drakma
|
:drakma
|
||||||
|
;; radiance interfaces
|
||||||
|
:i-log4cl
|
||||||
|
;; :i-postmodern
|
||||||
|
:r-clip
|
||||||
|
:r-data-model
|
||||||
|
:r-simple-profile
|
||||||
|
:r-simple-rate
|
||||||
(:interface :auth)
|
(:interface :auth)
|
||||||
(:interface :database)
|
(:interface :database)
|
||||||
|
(:interface :relational-database)
|
||||||
(:interface :user))
|
(:interface :user))
|
||||||
:pathname "./"
|
:pathname "./"
|
||||||
:components ((:file "app-utils")
|
:components ((:file "app-utils")
|
||||||
|
|
|
||||||
|
|
@ -924,11 +924,10 @@
|
||||||
(compile-styles) ; Generate CSS file using LASS
|
(compile-styles) ; Generate CSS file using LASS
|
||||||
|
|
||||||
;; Ensure RADIANCE environment is properly set before startup
|
;; Ensure RADIANCE environment is properly set before startup
|
||||||
(unless (radiance:environment)
|
;; (unless (radiance:environment)
|
||||||
(setf (radiance:environment) "default"))
|
;; (setf (radiance:environment) "asteroid"))
|
||||||
|
|
||||||
(radiance:startup)
|
(radiance:startup))
|
||||||
(format t "Server started! Visit http://localhost:~a/asteroid/~%" port))
|
|
||||||
|
|
||||||
(defun stop-server ()
|
(defun stop-server ()
|
||||||
"Stop the Asteroid Radio RADIANCE server"
|
"Stop the Asteroid Radio RADIANCE server"
|
||||||
|
|
@ -950,13 +949,19 @@
|
||||||
(defun ensure-radiance-environment ()
|
(defun ensure-radiance-environment ()
|
||||||
"Ensure RADIANCE environment is properly configured for persistence"
|
"Ensure RADIANCE environment is properly configured for persistence"
|
||||||
(unless (radiance:environment)
|
(unless (radiance:environment)
|
||||||
(setf (radiance:environment) "default"))
|
(setf (radiance:environment) "asteroid"))
|
||||||
|
|
||||||
;; Ensure the database directory exists
|
(log:info "~2&~15A - ~A~%~15A - ~A~%~15A - ~A~%~15A - ~A~%~15A - ~A~2%"
|
||||||
(let ((db-dir (merge-pathnames ".config/radiance/default/i-lambdalite/radiance.db/"
|
":configuration"
|
||||||
(user-homedir-pathname))))
|
(radiance:environment-directory (radiance-core:environment) :configuration)
|
||||||
(ensure-directories-exist db-dir)
|
":cache"
|
||||||
(format t "Database directory: ~a~%" db-dir)))
|
(radiance:environment-directory (radiance-core:environment) :cache)
|
||||||
|
":data"
|
||||||
|
(radiance:environment-directory (radiance-core:environment) :data)
|
||||||
|
":template"
|
||||||
|
(radiance:environment-directory (radiance-core:environment) :template)
|
||||||
|
":static"
|
||||||
|
(radiance:environment-directory (radiance-core:environment) :static)))
|
||||||
|
|
||||||
(defun -main (&optional args (debug t))
|
(defun -main (&optional args (debug t))
|
||||||
(declare (ignorable args))
|
(declare (ignorable args))
|
||||||
|
|
|
||||||
|
|
@ -22,9 +22,9 @@
|
||||||
(user-role (if (listp user-role-raw) (first user-role-raw) user-role-raw))
|
(user-role (if (listp user-role-raw) (first user-role-raw) user-role-raw))
|
||||||
(redirect-path (cond
|
(redirect-path (cond
|
||||||
;; Admin users go to admin dashboard
|
;; Admin users go to admin dashboard
|
||||||
((string-equal user-role "admin") "/asteroid/admin")
|
((string-equal user-role "admin") "/admin")
|
||||||
;; All other users go to their profile
|
;; All other users go to their profile
|
||||||
(t "/asteroid/profile"))))
|
(t "/profile"))))
|
||||||
(format t "User ID from DB: ~a~%" user-id)
|
(format t "User ID from DB: ~a~%" user-id)
|
||||||
(format t "User role: ~a, redirecting to: ~a~%" user-role redirect-path)
|
(format t "User role: ~a, redirecting to: ~a~%" user-role redirect-path)
|
||||||
(setf (session:field "user-id") (if (listp user-id) (first user-id) user-id))
|
(setf (session:field "user-id") (if (listp user-id) (first user-id) user-id))
|
||||||
|
|
|
||||||
|
|
@ -1,28 +1,45 @@
|
||||||
;; -*-lisp-*-
|
;; -*-lisp-*-
|
||||||
|
|
||||||
(unless *load-pathname*
|
|
||||||
(error "Please LOAD this file."))
|
|
||||||
|
|
||||||
;; Commented out to allow building with Quicklisp already loaded
|
|
||||||
;; (when (find-package :quicklisp)
|
|
||||||
;; (error "Please run this file as a script or from the Makefile."))
|
|
||||||
|
|
||||||
(defpackage #:asteroid-bootstrap
|
(defpackage #:asteroid-bootstrap
|
||||||
|
(:nicknames #:ab)
|
||||||
(:use #:cl)
|
(:use #:cl)
|
||||||
(:export #:*root* #:path))
|
(:export #:*root* #:path))
|
||||||
|
|
||||||
|
(in-package #:asteroid-bootstrap)
|
||||||
|
|
||||||
|
(defvar *root* (make-pathname :name NIL :type NIL :defaults *load-pathname*))
|
||||||
|
|
||||||
|
(defun path (pathname)
|
||||||
|
(merge-pathnames pathname *root*))
|
||||||
|
|
||||||
;; we require quicklisp to load our transitive dependencies.
|
;; we require quicklisp to load our transitive dependencies.
|
||||||
(load "~/quicklisp/setup.lisp")
|
(load "~/quicklisp/setup.lisp")
|
||||||
|
|
||||||
|
|
||||||
;; Build script for creating asteroid executable using save-lisp-and-die
|
;; Build script for creating asteroid executable using save-lisp-and-die
|
||||||
;; ASDF will automatically find the project via source-registry.conf
|
;; ASDF will automatically find the project via source-registry.conf
|
||||||
|
|
||||||
;; Load RADIANCE first, then handle environment
|
;; Load RADIANCE first, then handle environment
|
||||||
(ql:quickload :radiance)
|
(ql:quickload :radiance)
|
||||||
|
|
||||||
|
;; (defmethod radiance:environment-directory (environment (kind (eql :configuration)))
|
||||||
|
;; (ab:path (make-pathname :directory `(:relative "config" ,environment))))
|
||||||
|
|
||||||
|
;; (defmethod radiance:environment-directory (environment (kind (eql :cache)))
|
||||||
|
;; (ab:path (make-pathname :directory `(:relative "cache" ,environment))))
|
||||||
|
|
||||||
|
;; (defmethod radiance:environment-directory (environment (kind (eql :data)))
|
||||||
|
;; (ab:path (make-pathname :directory `(:relative "data" ,environment))))
|
||||||
|
|
||||||
|
;; (defmethod radiance:environment-directory (environment (kind (eql :template)))
|
||||||
|
;; (ab:path (make-pathname :directory `(:relative "override" ,environment "template"))))
|
||||||
|
|
||||||
|
;; (defmethod radiance:environment-directory (environment (kind (eql :static)))
|
||||||
|
;; (ab:path (make-pathname :directory `(:relative "override" ,environment "static"))))
|
||||||
|
|
||||||
;; Ensure RADIANCE environment is set before loading
|
;; Ensure RADIANCE environment is set before loading
|
||||||
(unless (radiance:environment)
|
(unless (radiance:environment)
|
||||||
(setf (radiance:environment) "default"))
|
(setf (radiance:environment) "asteroid"))
|
||||||
|
|
||||||
;; Load the system with RADIANCE environment handling
|
;; Load the system with RADIANCE environment handling
|
||||||
(handler-bind ((radiance-core:environment-not-set
|
(handler-bind ((radiance-core:environment-not-set
|
||||||
|
|
@ -31,6 +48,18 @@
|
||||||
(invoke-restart 'continue))))
|
(invoke-restart 'continue))))
|
||||||
(ql:quickload :asteroid))
|
(ql:quickload :asteroid))
|
||||||
|
|
||||||
|
(log:info "~2&~15A - ~A~%~15A - ~A~%~15A - ~A~%~15A - ~A~%~15A - ~A~2%"
|
||||||
|
":configuration"
|
||||||
|
(radiance:environment-directory (radiance-core:environment) :configuration)
|
||||||
|
":cache"
|
||||||
|
(radiance:environment-directory (radiance-core:environment) :cache)
|
||||||
|
":data"
|
||||||
|
(radiance:environment-directory (radiance-core:environment) :data)
|
||||||
|
":template"
|
||||||
|
(radiance:environment-directory (radiance-core:environment) :template)
|
||||||
|
":static"
|
||||||
|
(radiance:environment-directory (radiance-core:environment) :static))
|
||||||
|
|
||||||
;; Define the main function for the executable
|
;; Define the main function for the executable
|
||||||
(defun main ()
|
(defun main ()
|
||||||
(asteroid:-main))
|
(asteroid:-main))
|
||||||
|
|
@ -39,4 +68,5 @@
|
||||||
(sb-ext:save-lisp-and-die "asteroid"
|
(sb-ext:save-lisp-and-die "asteroid"
|
||||||
:toplevel #'main
|
:toplevel #'main
|
||||||
:executable t
|
:executable t
|
||||||
:compression 22)
|
:compression 12)
|
||||||
|
|
||||||
|
|
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 111 KiB |
162
stream-queue.m3u
162
stream-queue.m3u
|
|
@ -1 +1,163 @@
|
||||||
#EXTM3U
|
#EXTM3U
|
||||||
|
#EXTINF:370,Vector Lovers - City Lights From a Train
|
||||||
|
/app/music/Vector Lovers/City Lights From a Train.flac
|
||||||
|
#EXTINF:400,The Black Dog - Psil-Cosyin
|
||||||
|
/app/music/The Black Dog/Psil-Cosyin.flac
|
||||||
|
#EXTINF:320,Plaid - Eyen
|
||||||
|
/app/music/Plaid/Eyen.flac
|
||||||
|
#EXTINF:330,ISAN - Birds Over Barges
|
||||||
|
/app/music/ISAN/Birds Over Barges.flac
|
||||||
|
#EXTINF:360,Ochre - Bluebottle Farm
|
||||||
|
/app/music/Ochre/Bluebottle Farm.flac
|
||||||
|
#EXTINF:390,Arovane - Theme
|
||||||
|
/app/music/Arovane/Theme.flac
|
||||||
|
#EXTINF:380,Proem - Deep Like Airline Failure
|
||||||
|
/app/music/Proem/Deep Like Airline Failure.flac
|
||||||
|
#EXTINF:310,Solvent - My Radio (Remix)
|
||||||
|
/app/music/Solvent/My Radio (Remix).flac
|
||||||
|
#EXTINF:350,Bochum Welt - Marylebone (7th)
|
||||||
|
/app/music/Bochum Welt/Marylebone (7th).flac
|
||||||
|
#EXTINF:290,Mrs Jynx - Shibuya Lullaby
|
||||||
|
/app/music/Mrs Jynx/Shibuya Lullaby.flac
|
||||||
|
#EXTINF:340,Kettel - Whisper Me Wishes
|
||||||
|
/app/music/Kettel/Whisper Me Wishes.flac
|
||||||
|
#EXTINF:360,Christ. - Perlandine Friday
|
||||||
|
/app/music/Christ./Perlandine Friday.flac
|
||||||
|
#EXTINF:330,Cepia - Ithaca
|
||||||
|
/app/music/Cepia/Ithaca.flac
|
||||||
|
#EXTINF:340,Datassette - Vacuform
|
||||||
|
/app/music/Datassette/Vacuform.flac
|
||||||
|
#EXTINF:390,Plant43 - Dreams of the Sentient City
|
||||||
|
/app/music/Plant43/Dreams of the Sentient City.flac
|
||||||
|
#EXTINF:410,Claro Intelecto - Peace of Mind (Electrosoul)
|
||||||
|
/app/music/Claro Intelecto/Peace of Mind (Electrosoul).flac
|
||||||
|
#EXTINF:430,E.R.P. - Evoked
|
||||||
|
/app/music/E.R.P./Evoked.flac
|
||||||
|
#EXTINF:310,Der Zyklus - Formenverwandler
|
||||||
|
/app/music/Der Zyklus/Formenverwandler.flac
|
||||||
|
#EXTINF:330,Dopplereffekt - Infophysix
|
||||||
|
/app/music/Dopplereffekt/Infophysix.flac
|
||||||
|
#EXTINF:350,Drexciya - Wavejumper
|
||||||
|
/app/music/Drexciya/Wavejumper.flac
|
||||||
|
#EXTINF:375,The Other People Place - Sorrow & A Cup of Joe
|
||||||
|
/app/music/The Other People Place/Sorrow & A Cup of Joe.flac
|
||||||
|
#EXTINF:340,Arpanet - Wireless Internet
|
||||||
|
/app/music/Arpanet/Wireless Internet.flac
|
||||||
|
#EXTINF:380,Legowelt - Sturmvogel
|
||||||
|
/app/music/Legowelt/Sturmvogel.flac
|
||||||
|
#EXTINF:310,DMX Krew - Space Paranoia
|
||||||
|
/app/music/DMX Krew/Space Paranoia.flac
|
||||||
|
#EXTINF:360,Skywave Theory - Nova Drift
|
||||||
|
/app/music/Skywave Theory/Nova Drift.flac
|
||||||
|
#EXTINF:460,Pye Corner Audio - Transmission Four
|
||||||
|
/app/music/Pye Corner Audio/Transmission Four.flac
|
||||||
|
#EXTINF:390,B12 - Heaven Sent
|
||||||
|
/app/music/B12/Heaven Sent.flac
|
||||||
|
#EXTINF:450,Higher Intelligence Agency - Tortoise
|
||||||
|
/app/music/Higher Intelligence Agency/Tortoise.flac
|
||||||
|
#EXTINF:420,Biosphere - Kobresia
|
||||||
|
/app/music/Biosphere/Kobresia.flac
|
||||||
|
#EXTINF:870,Global Communication - 14:31
|
||||||
|
/app/music/Global Communication/14:31.flac
|
||||||
|
#EXTINF:500,Monolake - Cyan
|
||||||
|
/app/music/Monolake/Cyan.flac
|
||||||
|
#EXTINF:660,Deepchord - Electromagnetic
|
||||||
|
/app/music/Deepchord/Electromagnetic.flac
|
||||||
|
#EXTINF:1020,GAS - Pop 4
|
||||||
|
/app/music/GAS/Pop 4.flac
|
||||||
|
#EXTINF:600,Yagya - Rigning Nýju
|
||||||
|
/app/music/Yagya/Rigning Nýju.flac
|
||||||
|
#EXTINF:990,Voices From The Lake - Velo di Maya
|
||||||
|
/app/music/Voices From The Lake/Velo di Maya.flac
|
||||||
|
#EXTINF:3720,ASC - Time Heals All
|
||||||
|
/app/music/ASC/Time Heals All.flac
|
||||||
|
#EXTINF:540,36 - Room 237
|
||||||
|
/app/music/36/Room 237.flac
|
||||||
|
#EXTINF:900,Loscil - Endless Falls
|
||||||
|
/app/music/Loscil/Endless Falls.flac
|
||||||
|
#EXTINF:450,Kiasmos - Looped
|
||||||
|
/app/music/Kiasmos/Looped.flac
|
||||||
|
#EXTINF:590,Underworld - Rez
|
||||||
|
/app/music/Underworld/Rez.flac
|
||||||
|
#EXTINF:570,Orbital - Halcyon + On + On
|
||||||
|
/app/music/Orbital/Halcyon + On + On.flac
|
||||||
|
#EXTINF:1080,The Orb - A Huge Ever Growing Pulsating Brain
|
||||||
|
/app/music/The Orb/A Huge Ever Growing Pulsating Brain.flac
|
||||||
|
#EXTINF:360,Autechre - Slip
|
||||||
|
/app/music/Autechre/Slip.flac
|
||||||
|
#EXTINF:400,Labradford - S (Mi Media Naranja)
|
||||||
|
/app/music/Labradford/S (Mi Media Naranja).flac
|
||||||
|
#EXTINF:350,Vector Lovers - Rusting Cars and Wildflowers
|
||||||
|
/app/music/Vector Lovers/Rusting Cars and Wildflowers.flac
|
||||||
|
#EXTINF:390,The Black Dog - Raxmus
|
||||||
|
/app/music/The Black Dog/Raxmus.flac
|
||||||
|
#EXTINF:315,Plaid - Hawkmoth
|
||||||
|
/app/music/Plaid/Hawkmoth.flac
|
||||||
|
#EXTINF:320,ISAN - What This Button Did
|
||||||
|
/app/music/ISAN/What This Button Did.flac
|
||||||
|
#EXTINF:370,Ochre - Circadies
|
||||||
|
/app/music/Ochre/Circadies.flac
|
||||||
|
#EXTINF:420,Arovane - Tides
|
||||||
|
/app/music/Arovane/Tides.flac
|
||||||
|
#EXTINF:370,Proem - Nothing is as It Seems
|
||||||
|
/app/music/Proem/Nothing is as It Seems.flac
|
||||||
|
#EXTINF:300,Solvent - Loss For Words
|
||||||
|
/app/music/Solvent/Loss For Words.flac
|
||||||
|
#EXTINF:340,Bochum Welt - Saint (77sunset)
|
||||||
|
/app/music/Bochum Welt/Saint (77sunset).flac
|
||||||
|
#EXTINF:280,Mrs Jynx - Stay Home
|
||||||
|
/app/music/Mrs Jynx/Stay Home.flac
|
||||||
|
#EXTINF:330,Kettel - Church
|
||||||
|
/app/music/Kettel/Church.flac
|
||||||
|
#EXTINF:370,Christ. - Cordate
|
||||||
|
/app/music/Christ./Cordate.flac
|
||||||
|
#EXTINF:350,Datassette - Computers Elevate
|
||||||
|
/app/music/Datassette/Computers Elevate.flac
|
||||||
|
#EXTINF:420,Plant43 - The Cold Surveyor
|
||||||
|
/app/music/Plant43/The Cold Surveyor.flac
|
||||||
|
#EXTINF:380,Claro Intelecto - Section
|
||||||
|
/app/music/Claro Intelecto/Section.flac
|
||||||
|
#EXTINF:440,E.R.P. - Vox Automaton
|
||||||
|
/app/music/E.R.P./Vox Automaton.flac
|
||||||
|
#EXTINF:300,Dopplereffekt - Z-Boson
|
||||||
|
/app/music/Dopplereffekt/Z-Boson.flac
|
||||||
|
#EXTINF:380,Drexciya - Digital Tsunami
|
||||||
|
/app/music/Drexciya/Digital Tsunami.flac
|
||||||
|
#EXTINF:350,The Other People Place - You Said You Want Me
|
||||||
|
/app/music/The Other People Place/You Said You Want Me.flac
|
||||||
|
#EXTINF:370,Legowelt - Star Gazing
|
||||||
|
/app/music/Legowelt/Star Gazing.flac
|
||||||
|
#EXTINF:440,Pye Corner Audio - Electronic Rhythm Number 3
|
||||||
|
/app/music/Pye Corner Audio/Electronic Rhythm Number 3.flac
|
||||||
|
#EXTINF:460,B12 - Infinite Lites (Classic Mix)
|
||||||
|
/app/music/B12/Infinite Lites (Classic Mix).flac
|
||||||
|
#EXTINF:390,Biosphere - The Things I Tell You
|
||||||
|
/app/music/Biosphere/The Things I Tell You.flac
|
||||||
|
#EXTINF:580,Global Communication - 9:39
|
||||||
|
/app/music/Global Communication/9:39.flac
|
||||||
|
#EXTINF:460,Monolake - T-Channel
|
||||||
|
/app/music/Monolake/T-Channel.flac
|
||||||
|
#EXTINF:690,Deepchord - Vantage Isle (Variant)
|
||||||
|
/app/music/Deepchord/Vantage Isle (Variant).flac
|
||||||
|
#EXTINF:840,GAS - Königsforst 5
|
||||||
|
/app/music/GAS/Königsforst 5.flac
|
||||||
|
#EXTINF:520,Yagya - The Salt on Her Cheeks
|
||||||
|
/app/music/Yagya/The Salt on Her Cheeks.flac
|
||||||
|
#EXTINF:720,Voices From The Lake - Dream State
|
||||||
|
/app/music/Voices From The Lake/Dream State.flac
|
||||||
|
#EXTINF:510,36 - Night Rain
|
||||||
|
/app/music/36/Night Rain.flac
|
||||||
|
#EXTINF:470,Loscil - First Narrows
|
||||||
|
/app/music/Loscil/First Narrows.flac
|
||||||
|
#EXTINF:400,Kiasmos - Burnt
|
||||||
|
/app/music/Kiasmos/Burnt.flac
|
||||||
|
#EXTINF:570,Underworld - Jumbo (Extended)
|
||||||
|
/app/music/Underworld/Jumbo (Extended).flac
|
||||||
|
#EXTINF:480,Orbital - Belfast
|
||||||
|
/app/music/Orbital/Belfast.flac
|
||||||
|
#EXTINF:540,The Orb - Little Fluffy Clouds (Ambient Mix)
|
||||||
|
/app/music/The Orb/Little Fluffy Clouds (Ambient Mix).flac
|
||||||
|
#EXTINF:390,Autechre - Nine
|
||||||
|
/app/music/Autechre/Nine.flac
|
||||||
|
#EXTINF:380,Labradford - G (Mi Media Naranja)
|
||||||
|
/app/music/Labradford/G (Mi Media Naranja).flac
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue