Переход на асинхронное закрытие каналов с таймаутом, чтобы при обрыве соединения...
[vpproxy.git] / plugins / modules / M3uParser.py
index 9e2fce64aeb79ffdb7d69bcb84c0ed2d5a256bb5..5bee611475d247073a6a0023d2afe938d7d8e321 100644 (file)
@@ -6,10 +6,11 @@ import hexdump
 import codecs
 
 class track():
 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.length = length
         self.title = title
         self.path = path
+        self.attrs = attrs
 
 
 # # # song info lines are formatted like:
 
 
 # # # song info lines are formatted like:
@@ -41,9 +42,29 @@ def parseM3U(infile):
         line = line.strip()
         if line.startswith('#EXTINF:'):
             # pull length and title from #EXTINF line
         line = line.strip()
         if line.startswith('#EXTINF:'):
             # pull length and title from #EXTINF line
-            length,title=line.split('#EXTINF:')[1].split(',',1)
+            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')
             title=title.decode('string_escape')
-            song=track(length,title,None)
+            song=track(length,title,None,attrs)
         elif (len(line) != 0):
             # pull song path from all other, non-blank lines
             song.path=line
         elif (len(line) != 0):
             # pull song path from all other, non-blank lines
             song.path=line