9e2fce64aeb79ffdb7d69bcb84c0ed2d5a256bb5
[vpproxy.git] / plugins / modules / M3uParser.py
1 # more info on the M3U file format available here:
2 # http://n4k3d.com/the-m3u-file-format/
3
4 import sys
5 import hexdump
6 import codecs
7
8 class track():
9     def __init__(self, length, title, path):
10         self.length = length
11         self.title = title
12         self.path = path
13
14
15 # # # song info lines are formatted like:
16 #EXTINF:419,Alice In Chains - Rotten Apple
17 # length (seconds)
18 # Song title
19 # # # file name - relative or absolute path of file
20 # ..\Minus The Bear - Planet of Ice\Minus The Bear_Planet of Ice_01_Burying Luck.mp3
21 def parseM3U(infile):
22     inf = open(infile,'r')
23
24     # # # all m3u files should start with this line:
25         #EXTM3U
26     # this is not a valid M3U and we should stop..
27     line = inf.readline()
28     line = line.lstrip('\xef\xbb\xbf')
29     line = line.rstrip('\n')
30     line = line.strip()
31     if not line.startswith('#EXTM3U'):
32        return
33
34     # initialize playlist variables before reading file
35     playlist=[]
36     song=track(None,None,None)
37
38     for line in inf:
39         line = line.lstrip('\xef\xbb\xbf')
40         line = line.rstrip('\n')
41         line = line.strip()
42         if line.startswith('#EXTINF:'):
43             # pull length and title from #EXTINF line
44             length,title=line.split('#EXTINF:')[1].split(',',1)
45             title=title.decode('string_escape')
46             song=track(length,title,None)
47         elif (len(line) != 0):
48             # pull song path from all other, non-blank lines
49             song.path=line
50             playlist.append(song)
51
52             # reset the song variable so it doesn't use the same EXTINF more than once
53             song=track(None,None,None)
54
55     inf.close()
56
57     return playlist
58
59 # for now, just pull the track info and print it onscreen
60 # get the M3U file path from the first command line argument
61 def main():
62     m3ufile=sys.argv[1]
63     playlist = parseM3U(m3ufile)
64     for track in playlist:
65         print (track.title, track.length, track.path)
66
67 if __name__ == '__main__':
68     main()
69