__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
