diff --git a/jukebox/jukebox.go b/jukebox/jukebox.go index 476864b6..c17c33b5 100644 --- a/jukebox/jukebox.go +++ b/jukebox/jukebox.go @@ -12,6 +12,7 @@ import ( "path/filepath" "regexp" "strconv" + "strings" "sync" "time" @@ -133,7 +134,9 @@ func (j *Jukebox) SetPlaylist(items []string) error { var newPlayingIndex = -1 for i, item := range items { - item, _ = filepath.Abs(item) + if !strings.HasPrefix(item, "http") { + item, _ = filepath.Abs(item) + } if currentPlayingIndex >= 0 && playlist[currentPlayingIndex].Filename == item { newPlayingIndex = i continue // don't add current track to loadlist diff --git a/server/ctrlsubsonic/handlers_common.go b/server/ctrlsubsonic/handlers_common.go index 8db9ad87..90ef5df6 100644 --- a/server/ctrlsubsonic/handlers_common.go +++ b/server/ctrlsubsonic/handlers_common.go @@ -437,7 +437,7 @@ func (c *Controller) ServeJukebox(r *http.Request) *spec.Response { // nolint:go case "get": specPlaylist, err := getSpecPlaylist() if err != nil { - return spec.NewError(10, "error getting status tracks: %v", err) + return spec.NewError(10, "error getting spec playlist: %v", err) } status, err := getSpecStatus() if err != nil { diff --git a/server/ctrlsubsonic/specidpaths/specidpaths.go b/server/ctrlsubsonic/specidpaths/specidpaths.go index 51fb0ece..e0d3cc7d 100644 --- a/server/ctrlsubsonic/specidpaths/specidpaths.go +++ b/server/ctrlsubsonic/specidpaths/specidpaths.go @@ -39,7 +39,7 @@ func Locate(dbc *db.DB, id specid.ID) (Result, error) { // Locate maps a location on the filesystem to a specid func Lookup(dbc *db.DB, musicPaths []string, podcastsPath string, path string) (Result, error) { - if !filepath.IsAbs(path) { + if !strings.HasPrefix(path, "http") && !filepath.IsAbs(path) { return nil, ErrNotAbs } @@ -56,6 +56,15 @@ func Lookup(dbc *db.DB, musicPaths []string, podcastsPath string, path string) ( return nil, ErrNotFound } + // probably internet radio + if strings.HasPrefix(path, "http") { + var irs db.InternetRadioStation + if err := dbc.First(&irs, "stream_url=?", path).Error; err == nil { + return &irs, nil + } + return nil, ErrNotFound + } + var musicPath string for _, mp := range musicPaths { if fileutil.HasPrefix(path, mp) {