From 3abe2c3fbe95ab0a38045c359b808fadac6220ea Mon Sep 17 00:00:00 2001 From: Samuel Johnson Date: Sun, 4 May 2025 00:25:10 -0400 Subject: Create music player GUI --- cmd/web/handlers/fs.go | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 cmd/web/handlers/fs.go (limited to 'cmd/web/handlers/fs.go') diff --git a/cmd/web/handlers/fs.go b/cmd/web/handlers/fs.go new file mode 100644 index 0000000..96f11d0 --- /dev/null +++ b/cmd/web/handlers/fs.go @@ -0,0 +1,60 @@ +package handlers + +import ( + "encoding/json" + "log" + "net/http" + "os" + "path/filepath" +) + +type fsContext struct { + err *log.Logger + path string + contentType string +} + +func (ctx *fsContext) readdir(w http.ResponseWriter, r *http.Request) { + entries, err := os.ReadDir(ctx.path) + if err != nil { + ctx.err.Print(err.Error()) + http.Error(w, "Internal Server Error", 500) + return + } + + files := make([]string, len(entries)) + for index, value := range entries { + files[index] = value.Name() + } + + w.Header().Set("Content-Type", "application/json") + json.NewEncoder(w).Encode(files) +} + +func (ctx *fsContext) get(w http.ResponseWriter, r *http.Request) { + name := r.URL.Query().Get("file") + + file, err := os.ReadFile(ctx.path + "/" + name) + if err != nil { + ctx.err.Print(err.Error()) + http.Error(w, "Internal Server Error", 500) + return + } + + if ctx.contentType != "" { + w.Header().Set("Content-Type", ctx.contentType) + } else { + switch filepath.Ext(name) { + case ".css": + w.Header().Set("Content-Type", "text/css") + case ".js": + w.Header().Set("Content-Type", "text/javascript") + case ".svg": + w.Header().Set("Content-Type", "image/svg+xml") + case ".png": + w.Header().Set("Content-Type", "image/png") + } + } + + w.Write(file) +} -- cgit v1.2.3