diff options
author | Samuel Johnson <[email protected]> | 2025-05-04 00:25:10 -0400 |
---|---|---|
committer | Samuel Johnson <[email protected]> | 2025-05-04 00:25:10 -0400 |
commit | 3abe2c3fbe95ab0a38045c359b808fadac6220ea (patch) | |
tree | 6cd22a874eb06fb76c588c8431ed73022b81086f /cmd/web/handlers/fs.go | |
parent | 005a588111e6d27b012bc923c39d97a6129f39f2 (diff) |
Create music player GUI
Diffstat (limited to 'cmd/web/handlers/fs.go')
-rw-r--r-- | cmd/web/handlers/fs.go | 60 |
1 files changed, 60 insertions, 0 deletions
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) +} |