WebM listing added
authorRoman Bazalevsky <rvb@rvb.name>
Fri, 24 Jul 2015 11:29:50 +0000 (14:29 +0300)
committerRoman Bazalevsky <rvb@rvb.name>
Fri, 24 Jul 2015 11:29:50 +0000 (14:29 +0300)
m3u_plugin.py [new file with mode: 0644]

diff --git a/m3u_plugin.py b/m3u_plugin.py
new file mode 100644 (file)
index 0000000..a57435f
--- /dev/null
@@ -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