X-Git-Url: https://git.rvb.name/vpproxy.git/blobdiff_plain/7bb418d8c7787d1ed6fcd421de8a49fc2738a36e..675a5b84e7db97d207cc05eb35b13d22128715dd:/plugins/m3u_plugin.py?ds=sidebyside diff --git a/plugins/m3u_plugin.py b/plugins/m3u_plugin.py index 90f529f..4d806fa 100644 --- a/plugins/m3u_plugin.py +++ b/plugins/m3u_plugin.py @@ -38,13 +38,14 @@ import os class M3u(VPProxyPlugin): - handlers = ('m3u', 'm3ut', 'm3uw', "list", "play", "index") + handlers = ('m3u', 'm3ut', 'm3uw', 'm3uo', 'list', 'play', 'index') logger = logging.getLogger('plugin_m3u') playlist = None def handle(self, connection): + logger = logging.getLogger('plugin_m3u') hostport = connection.headers['Host'] self.splitted_path=connection.path.split('/') @@ -55,10 +56,13 @@ class M3u(VPProxyPlugin): prefix='ogg' elif self.splitted_path[1]=='m3ut': prefix='mp4' + elif self.splitted_path[1]=='m3uo': + prefix='ogv' elif self.splitted_path[1] in ("list","play","index"): None else: connection.dieWithError(404) + return if len(self.splitted_path)>3 and self.splitted_path[1]!="play": connection.dieWithError() @@ -66,9 +70,12 @@ class M3u(VPProxyPlugin): if self.splitted_path[1]=='index': + text="" for dir in os.walk(config.m3u_directory): if dir[0]==config.m3u_directory: - text='\n'.join(dir[2]) + for dirname in dir[2]: + if dirname.endswith('.m3u'): + text=text+'\n'+dirname connection.send_response(200) connection.send_header('Content-Type', 'text/plain; charset=utf-8') @@ -103,6 +110,10 @@ class M3u(VPProxyPlugin): connection.end_headers() elif self.splitted_path[1]=="play": channel=self.splitted_path[len(self.splitted_path)-1] + logger.debug('channel requestes= "%s"' % channel) + if not channel: + connection.dieWithError(404) + return channel=urllib.unquote(channel).decode('utf-8') if len(self.splitted_path)<=4: prefix="get" @@ -110,10 +121,13 @@ class M3u(VPProxyPlugin): prefix=self.splitted_path[len(self.splitted_path)-2] if prefix not in ('get','mp4','webm'): connection.dieWithError() + return else: connection.dieWithError() + return url=None for record in playlist: + if record.title: if record.title.decode('utf-8').replace('/','')==channel: url=record.path.decode('utf-8') if url: @@ -122,7 +136,9 @@ class M3u(VPProxyPlugin): connection.send_header('Location', redirect) connection.end_headers() else: + logger.debug('Nothing found!') connection.dieWithError(404) + return else: connection.send_response(200) @@ -139,10 +155,10 @@ class M3u(VPProxyPlugin): connection.dieWithError() return + exported = "" + if self.splitted_path[1]=="list": - exported = "" - for record in playlist: if record.title: exported = exported + "" + record.title.decode('utf-8').replace('/','') + "\n" @@ -156,13 +172,30 @@ class M3u(VPProxyPlugin): channel=dict() channel['name']=record.title.decode('utf-8') channel['url']=record.path.decode('utf-8') + try: + channel['tvg']=record.attrs['tvg-name'].decode('utf-8') + except: + None + try: + if record.attrs['group-title'] != 'None': + channel['group']=record.attrs['group-title'].decode('utf-8') + except: + None + try: + channel['country']=record.attrs['country'].decode('utf-8') + except: + None + try: + channel['logo']=record.attrs['tvg-logo'].decode('utf-8') + except: + None playlistgen.addItem(channel) exported = playlistgen.exportm3u(hostport,prefix) - exported = exported.encode('utf-8') - - connection.wfile.write(exported) + if exported: + exported = exported.encode('utf-8') + connection.wfile.write(exported) def getparam(self, key): if key in self.params: