X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/f44dfc20f4ed708d67603f767a976c1168393627..4c1d3d2f5cf39f72bf85041a6ba6665350ea742e:/lib/python/Components/Playlist.py diff --git a/lib/python/Components/Playlist.py b/lib/python/Components/Playlist.py index 704b2f84..8d9d78af 100644 --- a/lib/python/Components/Playlist.py +++ b/lib/python/Components/Playlist.py @@ -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