diff --git a/routes.go b/routes.go
index 4417393..190056a 100644
--- a/routes.go
+++ b/routes.go
@@ -3,6 +3,9 @@ package main
import (
"log"
"net/http"
+ "os"
+ "path"
+ "path/filepath"
"text/template"
"github.com/google/uuid"
@@ -21,9 +24,8 @@ func init() {
app.router.GET("/", app.Index)
app.router.GET("/play/:playlist", app.Play)
app.router.GET("/reset", app.Reset)
-
- app.router.ServeFiles("/js/*filepath", http.Dir("public"))
- app.router.ServeFiles("/css/*filepath", http.Dir("css"))
+ app.router.GET("/public/*js", app.ServeFiles)
+ app.router.GET("/css/*css", app.ServeFiles)
app.router.HandlerFunc("GET", "/ws", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
log.Printf("WS connection from %v\n", r.RemoteAddr)
@@ -49,6 +51,28 @@ type IndexData struct {
Ambiance []string
}
+func (app App) ServeFiles(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {
+ filePath := filepath.Join(".", r.URL.Path)
+
+ file, err := os.Open(filePath)
+ if err != nil {
+ log.Println(err)
+ http.Error(w, "no such file", http.StatusNotFound)
+ return
+ }
+ defer file.Close()
+
+ fileStat, err := os.Stat(filePath)
+ if err != nil {
+ log.Println(err)
+ http.Error(w, "unable to get file stat", http.StatusInternalServerError)
+ }
+
+ _, filename := path.Split(filePath)
+ t := fileStat.ModTime()
+ http.ServeContent(w, r, filename, t, file)
+}
+
func (app App) Index(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {
playlists, err := app.GetPlaylists()
if err != nil {
diff --git a/tmpl/index.tmpl b/tmpl/index.tmpl
index 8c436a7..e3ffd0f 100644
--- a/tmpl/index.tmpl
+++ b/tmpl/index.tmpl
@@ -74,6 +74,6 @@
-
+