Kaynağa Gözat

serve content

Innocenty Enikeew 7 yıl önce
ebeveyn
işleme
dc2e3f75c9
1 değiştirilmiş dosya ile 13 ekleme ve 1 silme
  1. 13 1
      server.lisp

+ 13 - 1
server.lisp

@@ -9,6 +9,7 @@
   '(("/media/pogo/Music/" . "/music/")) "Map database paths to urls")
 
 (defun get-url (path)
+  (declare #.*standard-optimize-settings*)
   (when (and path (pathnamep path))
     (let ((path (namestring path)))
       (loop for (path-prefix . url-prefix) in *path-url-mappings*
@@ -128,6 +129,13 @@
   (200-json (query-tracks (car *db*)
                           :restrictions `((id . ,(getf params :id))))))
 
+(defun file-server (root)
+  (lambda (params)
+    (declare #.*standard-optimize-settings*)
+    (let ((file (probe-file (cl-fad:merge-pathnames-as-file
+                             root (car (getf params :splat))))))
+      (if file (list 200 nil file) +404+))))
+
 (defvar *mapper* (myway:make-mapper))
 (myway:connect *mapper* "/cat/:category/size" 'get-category-size)
 (myway:connect *mapper* "/cat/:category" 'get-category)
@@ -135,7 +143,11 @@
 (myway:connect *mapper* "/album/:id/tracks" 'album-tracks)
 ;;(myway:connect *mapper* "*" (lambda (p) (declare (ignore p)) +404+))
 
-(defun main (&rest args &key (port 5000) (debug nil) (use-thread t) &allow-other-keys)
+(defun main (&rest args &key (port 5000) (debug nil) (use-thread t) (serve-files t) &allow-other-keys)
+  (when serve-files
+    (loop for (path-prefix . url-prefix) in *path-url-mappings*
+       do (myway:connect *mapper* (concatenate 'string url-prefix "*")
+                         (file-server path-prefix))))
   (apply #'clack:clackup
          (myway:to-app *mapper*)
          :server :woo