From bb001905ff2058efe72a584eff61fb6744c26129 Mon Sep 17 00:00:00 2001 From: Roman Bazalevsky Date: Fri, 24 Jul 2015 14:29:50 +0300 Subject: [PATCH] WebM listing added --- m3u_plugin.py | 96 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 m3u_plugin.py diff --git a/m3u_plugin.py b/m3u_plugin.py new file mode 100644 index 0000000..a57435f --- /dev/null +++ b/m3u_plugin.py @@ -0,0 +1,96 @@ +__author__ = 'rvb' +''' +Local Playlist Plugin +(based on ytv plugin by ValdikSS) +http://ip:port/m3u +http://ip:port/m3u/index +http://ip:port/m3u{/list-name} +''' +import json +import logging +import urlparse +from modules.PluginInterface import VPProxyPlugin +from modules.PlaylistGenerator import PlaylistGenerator +from modules.M3uParser import parseM3U +import config.m3u as config +import os + +class M3u(VPProxyPlugin): + + handlers = ('m3u', 'm3ut', 'm3uw') + + logger = logging.getLogger('plugin_m3u') + playlist = None + + def handle(self, connection): + + hostport = connection.headers['Host'] + + self.splitted_path=connection.path.split('/') + + if self.splitted_path[1]=='m3u': + prefix='get' + elif self.splitted_path[1]=='m3uw': + prefix='webm' + elif self.splitted_path[1]=='m3ut': + prefix='mp4' + else: + connection.dieWithError(404) + + if len(self.splitted_path)>3: + connection.dieWithError() + return + + if len(self.splitted_path)<3: + + m3u_file=config.m3u_directory+'/'+config.m3u_default + + else: + + if self.splitted_path[2]=='index': + for dir in os.walk(config.m3u_directory): + if dir[0]==config.m3u_directory: + text='\n'.join(dir[2]) + + connection.send_response(200) + connection.send_header('Content-Type', 'text/plain') + connection.end_headers() + + listing = text.encode('utf-8') + connection.wfile.write(listing) + + return + + m3u_file=config.m3u_directory+'/'+self.splitted_path[2] + + connection.send_response(200) + connection.send_header('Content-Type', 'application/x-mpegurl') + connection.end_headers() + + try: + playlist=parseM3U(m3u_file) + except: + connection.dieWithError(404) + return + + if not playlist: + connection.dieWithError() + return + + playlistgen = PlaylistGenerator() + + for record in playlist: + channel=dict() + channel['name']=record.title.decode('utf-8') + channel['url']=record.path.decode('utf-8') + playlistgen.addItem(channel) + + exported = playlistgen.exportm3u(hostport,prefix) + exported = exported.encode('utf-8') + connection.wfile.write(exported) + + def getparam(self, key): + if key in self.params: + return self.params[key][0] + else: + return None -- 2.34.1