# http://n4k3d.com/the-m3u-file-format/
import sys
+import hexdump
+import codecs
class track():
- def __init__(self, length, title, path):
+ def __init__(self, length, title, path, attrs=None):
self.length = length
self.title = title
self.path = path
+ self.attrs = attrs
# # # song info lines are formatted like:
#EXTM3U
# this is not a valid M3U and we should stop..
line = inf.readline()
+ line = line.lstrip('\xef\xbb\xbf')
+ line = line.rstrip('\n')
+ line = line.strip()
if not line.startswith('#EXTM3U'):
return
song=track(None,None,None)
for line in inf:
- line=line.strip()
+ line = line.lstrip('\xef\xbb\xbf')
+ line = line.rstrip('\n')
+ line = line.strip()
if line.startswith('#EXTINF:'):
# pull length and title from #EXTINF line
- length,title=line.split('#EXTINF:')[1].split(',',1)
- song=track(length,title,None)
+ prefix,title=line.split('#EXTINF:')[1].split(',',1)
+ title=title.strip()
+ length,attrstr=prefix.split(' ',1)
+ attrs={}
+
+ while attrstr:
+
+ attrstr=attrstr.strip()
+ key,tail=attrstr.split('=',1)
+ if tail[0]=='\"':
+ tail=tail[1:]
+ value,attrstr=tail.split('"',1)
+ else:
+ try:
+ value,attrstr=tail.split(' ',1)
+ except ValueError:
+ value=tail
+ attrstr=''
+ attrstr=attrstr.strip()
+ attrs[key]=value
+
+ title=title.decode('string_escape')
+ song=track(length,title,None,attrs)
elif (len(line) != 0):
# pull song path from all other, non-blank lines
song.path=line