| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- package server
- import (
- "fmt"
- "net/http"
- "os"
- "strconv"
- "time"
- "github.com/felamaslen/gmus-backend/pkg/database"
- "github.com/felamaslen/gmus-backend/pkg/logger"
- "github.com/felamaslen/gmus-backend/pkg/repository"
- "github.com/go-redis/redis"
- )
- func streamSong(l *logger.Logger, rdb redis.Cmdable, w http.ResponseWriter, r *http.Request) error {
- songIdQuery := r.URL.Query().Get("songid")
- songId, err := strconv.Atoi(songIdQuery)
- if err != nil {
- w.WriteHeader(400)
- w.Write([]byte("Must set songid to an int"))
- return nil
- }
- db := database.GetConnection()
- songs, err := repository.SelectSong(db, []int{songId})
- if err != nil {
- return err
- }
- if len(*songs) == 0 {
- w.WriteHeader(404)
- w.Write([]byte("No such song"))
- return nil
- }
- song := (*songs)[0]
- fullFilePath := fmt.Sprintf("%s/%s", song.BasePath, song.RelativePath)
- l.Debug("Streaming to client: %s\n", fullFilePath)
- file, err := os.Open(fullFilePath)
- if err != nil {
- return err
- }
- defer file.Close()
- w.Header().Set("Cache-Control", "no-cache")
- http.ServeContent(w, r, song.Title, time.Unix(song.ModifiedDate, 0), file)
- return nil
- }
|