Support local paths as urls in playlists.

This commit is contained in:
caio 2021-08-02 22:10:07 -04:00 committed by Deluan Quintão
parent bcafe88ef9
commit e9d0abe0bc
3 changed files with 17 additions and 0 deletions

View File

@ -5,6 +5,7 @@ import (
"bytes"
"context"
"fmt"
"net/url"
"os"
"path/filepath"
"strings"
@ -82,6 +83,10 @@ func (s *playlistSync) parsePlaylist(ctx context.Context, playlistFile string, b
if strings.HasPrefix(path, "#") {
continue
}
if strings.HasPrefix(path, "file://") {
path = strings.TrimPrefix(path, "file://")
path, _ = url.QueryUnescape(path)
}
if !filepath.IsAbs(path) {
path = filepath.Join(baseDir, path)
}

View File

@ -22,6 +22,15 @@ var _ = Describe("playlistSync", func() {
})
It("parses well-formed playlists", func() {
pls, err := ps.parsePlaylist(ctx, "playlists/pls1.m3u", "tests/fixtures")
Expect(err).To(BeNil())
Expect(pls.Tracks).To(HaveLen(3))
Expect(pls.Tracks[0].Path).To(Equal("tests/fixtures/test.mp3"))
Expect(pls.Tracks[1].Path).To(Equal("tests/fixtures/test.ogg"))
Expect(pls.Tracks[2].Path).To(Equal("/tests/fixtures/01 Invisible (RED) Edit Version.mp3"))
})
It("parses playlists using LF ending", func() {
pls, err := ps.parsePlaylist(ctx, "lf-ended.m3u", "tests/fixtures/playlists")
Expect(err).To(BeNil())
Expect(pls.Tracks).To(HaveLen(2))

3
tests/fixtures/playlists/pls1.m3u vendored Normal file
View File

@ -0,0 +1,3 @@
test.mp3
test.ogg
file:///tests/fixtures/01%20Invisible%20(RED)%20Edit%20Version.mp3