quintodrome/server/subsonic/stream.go

56 lines
1.4 KiB
Go
Raw Normal View History

package subsonic
2016-03-03 10:46:19 -09:00
import (
"net/http"
2020-01-23 15:44:08 -09:00
"github.com/deluan/navidrome/engine"
"github.com/deluan/navidrome/server/subsonic/responses"
"github.com/deluan/navidrome/utils"
2016-03-03 10:46:19 -09:00
)
type StreamController struct {
streamer engine.MediaStreamer
}
func NewStreamController(streamer engine.MediaStreamer) *StreamController {
return &StreamController{streamer: streamer}
}
2016-03-03 10:46:19 -09:00
func (c *StreamController) Stream(w http.ResponseWriter, r *http.Request) (*responses.Subsonic, error) {
id, err := RequiredParamString(r, "id", "id parameter required")
if err != nil {
return nil, err
}
maxBitRate := utils.ParamInt(r, "maxBitRate", 0)
format := utils.ParamString(r, "format")
fs, err := c.streamer.NewFileSystem(r.Context(), maxBitRate, format)
2016-03-03 10:46:19 -09:00
if err != nil {
return nil, err
2016-03-03 10:46:19 -09:00
}
// To be able to use a http.FileSystem, we need to change the URL structure
r.URL.Path = id
http.FileServer(fs).ServeHTTP(w, r)
return nil, nil
}
func (c *StreamController) Download(w http.ResponseWriter, r *http.Request) (*responses.Subsonic, error) {
id, err := RequiredParamString(r, "id", "id parameter required")
if err != nil {
return nil, err
}
fs, err := c.streamer.NewFileSystem(r.Context(), 0, "raw")
if err != nil {
return nil, err
}
2016-03-03 10:46:19 -09:00
// To be able to use a http.FileSystem, we need to change the URL structure
r.URL.Path = id
http.FileServer(fs).ServeHTTP(w, r)
return nil, nil
2016-03-03 10:46:19 -09:00
}