66 "log"
77 "os"
88 "strings"
9-
10- "github.com/ergochat/readline"
119)
1210
1311type Playlist string
@@ -21,15 +19,7 @@ func (p Playlist) Create() error {
2119 defer playlist .Close ()
2220 w := bufio .NewWriter (playlist )
2321
24- // create line reader for search
25- rl , err := readline .NewFromConfig (& readline.Config {
26- Prompt : fmt .Sprintf ("%sSearch:%s " , C_CYAN , C_RESET ),
27- VimMode : true ,
28- })
29- if err != nil {
30- return err
31- }
32- defer rl .Close ()
22+ rl := GetReadline ()
3323
3424 // keep adding until user quits
3525 for {
@@ -47,7 +37,11 @@ func (p Playlist) Create() error {
4737 if query == "" {
4838 continue
4939 }
50- v , err := GetVideoFromMenu (query )
40+ vs , err := GetSearchResults (query )
41+ if err != nil {
42+ return err
43+ }
44+ v , err := GetVideoFromMenu (vs )
5145 if err != nil {
5246 return err
5347 }
@@ -61,24 +55,48 @@ func (p Playlist) Create() error {
6155
6256func (p Playlist ) Play (m bool ) error {
6357 f := string (p )
58+ prev := BACK_FLAG
59+ for {
60+ vs , err := getPlaylistVideos (f )
61+ if err != nil {
62+ return err
63+ }
64+ v , err := GetVideoFromMenu (vs )
65+ if err != nil {
66+ return err
67+ }
68+ switch v {
69+ case nil :
70+ return nil
71+ case BACK_FLAG :
72+ if prev == BACK_FLAG {
73+ return nil
74+ }
75+ v = prev
76+ }
77+ v .Play (m )
78+ prev = v
79+ }
80+ }
81+
82+ func getPlaylistVideos (f string ) (* []Video , error ) {
6483 playlist , err := os .ReadFile (f )
6584 if err != nil {
66- return err
85+ return nil , err
6786 }
6887 lines := strings .Split (string (playlist ), "\n " )
88+ var vs []Video
6989 for i := 0 ; i < len (lines )- 1 ; i ++ {
7090 id := lines [i ]
7191 if len (id ) == 11 {
72- v := Video {Id : VID (id )}
73- v .Play (m )
92+ v , err := GetVideoFromURL (VID (id ).URL ())
93+ if err != nil {
94+ return nil , err
95+ }
96+ vs = append (vs , * v )
7497 } else {
75- log .Printf ("%s[WARN]%s Skipped invalid Video ID: %s\n " , C_YELLOW , C_RESET , id )
76- }
77- playlist , err := os .ReadFile (f )
78- if err != nil {
79- return err
98+ log .Printf ("%s[WARN]%s Skipped invalid Video ID on line %d: %s\n " , C_YELLOW , C_RESET , i + 1 , id )
8099 }
81- lines = strings .Split (string (playlist ), "\n " )
82100 }
83- return nil
101+ return & vs , nil
84102}
0 commit comments