From 2bcac6edd18214b7eb998972f3f99183d44b0a51 Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Mercier Date: Sat, 15 Oct 2022 13:29:25 +0200 Subject: [PATCH] Can listen to tracks in the browser --- api/tracks.go | 18 +++++++++++++ model/track.go | 27 +++++++++++++++++++ .../routes/musiks/tracks/[tid]/+page.svelte | 7 +++++ 3 files changed, 52 insertions(+) diff --git a/api/tracks.go b/api/tracks.go index 60a3dc2..39ba861 100644 --- a/api/tracks.go +++ b/api/tracks.go @@ -85,6 +85,24 @@ func declareTracksRoutes(cfg *config.Config, router *gin.RouterGroup) { tracksRoutes.GET("", func(c *gin.Context) { c.JSON(http.StatusOK, c.MustGet("track")) }) + tracksRoutes.GET("/stream", func(c *gin.Context) { + track := c.MustGet("track").(*reveil.Track) + + size, err := track.Size() + if err != nil { + c.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{"errmsg": fmt.Sprintf("Unable to open the track: %s", err.Error())}) + return + } + + fd, err := track.Open() + if err != nil { + c.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{"errmsg": fmt.Sprintf("Unable to open the track: %s", err.Error())}) + return + } + defer fd.Close() + + c.DataFromReader(http.StatusOK, size, track.ContentType(), fd, map[string]string{}) + }) tracksRoutes.PUT("", func(c *gin.Context) { oldtrack := c.MustGet("track").(*reveil.Track) diff --git a/model/track.go b/model/track.go index a6ee991..1ec27f9 100644 --- a/model/track.go +++ b/model/track.go @@ -46,6 +46,33 @@ func LoadTracks(cfg *config.Config) (tracks []*Track, err error) { return } +func (t *Track) Open() (*os.File, error) { + return os.Open(t.Path) +} + +func (t *Track) Size() (int64, error) { + if st, err := os.Stat(t.Path); err != nil { + return 0, err + } else { + return st.Size(), err + } +} + +func (t *Track) ContentType() string { + switch filepath.Ext(t.Path) { + case ".flac": + return "audio/flac" + case ".mp3": + return "audio/mpeg" + case ".ogg": + return "audio/ogg" + case ".wav": + return "audio/vnd.wav" + } + + return "application/octet-stream" +} + func (t *Track) Rename(newName string) error { newPath := filepath.Join(filepath.Dir(t.Path), newName+filepath.Ext(t.Path)) diff --git a/ui/src/routes/musiks/tracks/[tid]/+page.svelte b/ui/src/routes/musiks/tracks/[tid]/+page.svelte index 38c41e5..efdf1b4 100644 --- a/ui/src/routes/musiks/tracks/[tid]/+page.svelte +++ b/ui/src/routes/musiks/tracks/[tid]/+page.svelte @@ -52,6 +52,13 @@ +
+ +
+