refs bug #429
[enigma2.git] / lib / python / Components / Playlist.py
index 704b2f84bf73bbd1dc2ac2f7b4897adc4b0437f9..8d9d78afee87d39131503314383e58af91d70c35 100644 (file)
@@ -1,6 +1,8 @@
 from ServiceReference import ServiceReference
+from enigma import eServiceReference
+import os
 
-class PlaylistIO:      
+class PlaylistIO:
        def __init__(self):
                self.list = []
        
@@ -14,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
                
@@ -22,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:
@@ -49,4 +63,66 @@ class PlaylistIOInternal(PlaylistIO):
                        file.write(str(x) + "\n")
                file.close()
                
-               return self.OK
\ No newline at end of file
+               return self.OK
+       
+class PlaylistIOM3U(PlaylistIO):
+       def __init__(self):
+               PlaylistIO.__init__(self)
+       
+       def open(self, filename):
+               self.clear()
+               self.displayname = None
+               try:
+                       file = open(filename, "r")
+               except IOError:
+                       return None
+               while True:
+                       entry = file.readline().strip()
+                       if entry == "":
+                               break
+                       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
+                       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
+               
+       def save(self, filename = None):
+               return self.ERROR
+       
+class PlaylistIOPLS(PlaylistIO):
+       def __init__(self):
+               PlaylistIO.__init__(self)
+       
+       def open(self, filename):
+               self.clear()
+               try:
+                       file = open(filename, "r")
+               except IOError:
+                       return None
+               entry = file.readline().strip()
+               if entry == "[playlist]": # extended pls
+                       while True:
+                               entry = file.readline().strip()
+                               if entry == "":
+                                       break
+                               if entry[0:4] == "File":
+                                       pos = entry.find('=') + 1
+                                       newentry = entry[pos:]
+                                       sref = PlaylistIO.getRef(self, filename, newentry)
+                                       self.addService(sref)
+               else:
+                       playlist = PlaylistIOM3U()
+                       return playlist.open(filename)
+               file.close()
+               return self.list
+               
+       def save(self, filename = None):
+               return self.ERROR
\ No newline at end of file