refs bug #429
[enigma2.git] / lib / python / Components / Playlist.py
index 744ee3af23da134345bae05a44ac64899d9d7ab4..8d9d78afee87d39131503314383e58af91d70c35 100644 (file)
@@ -1,7 +1,8 @@
 from ServiceReference import ServiceReference
+from enigma import eServiceReference
 import os
 
-class PlaylistIO:      
+class PlaylistIO:
        def __init__(self):
                self.list = []
        
@@ -15,6 +16,8 @@ class PlaylistIO:
        ERROR = 3
        UNSUPPORTED_FILES_IN_PLAYLIST = 4
        
+       REMOTE_PROTOS = ["http", "https", "udp", "rtsp", "rtp", "mmp"]
+       
        def save(self, filename = None):
                return self.ERROR
                
@@ -23,12 +26,22 @@ class PlaylistIO:
                
        def addService(self, service):
                self.list.append(service)
-               
-               
+
+       def getRef(self, filename, entry):
+               if entry[0] == "/":
+                       path = entry
+               else:
+                       path = os.path.dirname(filename) + "/" + entry
+                       for proto in self.REMOTE_PROTOS:
+                               if entry.startswith(proto):
+                                       path = entry
+               ref = eServiceReference(4097, 0, path)
+               return ServiceReference(ref)
+
 class PlaylistIOInternal(PlaylistIO):
        def __init__(self):
                PlaylistIO.__init__(self)
-       
+
        def open(self, filename):
                self.clear()
                try:
@@ -58,6 +71,7 @@ class PlaylistIOM3U(PlaylistIO):
        
        def open(self, filename):
                self.clear()
+               self.displayname = None
                try:
                        file = open(filename, "r")
                except IOError:
@@ -66,14 +80,17 @@ class PlaylistIOM3U(PlaylistIO):
                        entry = file.readline().strip()
                        if entry == "":
                                break
-                       if entry[0] != "#":
+                       if entry.startswith("#EXTINF:"):
+                               extinf = entry.split(',',1)
+                               if len(extinf) > 1:
+                                       self.displayname = extinf[1]
                                # TODO: use e2 facilities to create a service ref from file
-                               if entry[0] == "/":
-                                       self.addService(ServiceReference("4097:0:0:0:0:0:0:0:0:0:" + entry))
-                               elif entry.startswith("http"):
-                                       self.addService(ServiceReference("4097:0:0:0:0:0:0:0:0:0:" + entry.replace(':',"%3a")))
-                               else:
-                                       self.addService(ServiceReference("4097:0:0:0:0:0:0:0:0:0:" + os.path.dirname(filename) + "/" + entry))
+                       elif entry[0] != "#":
+                               sref = PlaylistIO.getRef(self, filename, entry)
+                               if self.displayname:
+                                       sref.ref.setName(self.displayname)
+                                       self.displayname = None
+                               self.addService(sref)
                file.close()
                return self.list
                
@@ -99,11 +116,8 @@ class PlaylistIOPLS(PlaylistIO):
                                if entry[0:4] == "File":
                                        pos = entry.find('=') + 1
                                        newentry = entry[pos:]
-                                       # TODO: use e2 facilities to create a service ref from file
-                                       if newentry[0] == "/":
-                                               self.addService(ServiceReference("4097:0:0:0:0:0:0:0:0:0:" + newentry))
-                                       else:
-                                               self.addService(ServiceReference("4097:0:0:0:0:0:0:0:0:0:" + os.path.dirname(filename) + "/" + newentry))
+                                       sref = PlaylistIO.getRef(self, filename, newentry)
+                                       self.addService(sref)
                else:
                        playlist = PlaylistIOM3U()
                        return playlist.open(filename)