--- /dev/null
+__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