Guest User

Untitled

a guest
May 9th, 2015
205
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.02 KB | None | 0 0
  1. from subprocess import Popen, call
  2. from vlc import Instance
  3. from sys import exit
  4. from csv import reader
  5. from xml.etree import ElementTree
  6. from filter import readSrt
  7. from download import FindSubtitles
  8. from srt2dfxp import convert
  9. import requests
  10. import time
  11. import os
  12. import cherrypy
  13.  
  14. def filterSubtitles(title, eptitle):
  15.     global name
  16.     if eptitle:
  17.         name = '{} {}'.format(title, eptitle)
  18.     else:
  19.         name = title
  20.    
  21.     done = False
  22.     downloadsub = True
  23.     subisvideolang = True
  24.    
  25.     # stop if there is a ***_filtered.srt and ***.mute file
  26.     for file in os.listdir(NetflixServer.videodir):
  27.         if file.endswith("_filtered.srt") \
  28.             and os.path.isfile(NetflixServer.videodir + name + '.mute'):
  29.             done = True
  30.             break
  31.     if done:
  32.         return
  33.  
  34.     # ask user to use existing srt
  35.     for file in os.listdir(NetflixServer.videodir):
  36.         if file.endswith(".srt") and not file.endswith("_filtered.srt"):
  37.             originalname = file
  38.             os.rename(NetflixServer.videodir+file, NetflixServer.videodir+name+'.srt')
  39.             downloadsub = False
  40.             break
  41.  
  42.     # download subtitle
  43.     if downloadsub:
  44.         subisvideolang = FindSubtitles(NetflixServer.videodir, name, NetflixServer.languages)
  45.         if subisvideolang:
  46.             # filter+mute using one downloaded file
  47.             readSrt(NetflixServer.videodir+name,NetflixServer.filtername, downloadsub, NetflixServer.wordmutingmargin, subisvideolang)
  48.             print 'The subtitles are in the same language as the video'
  49.         else:
  50.             # filter using translated subtitles
  51.             readSrt(NetflixServer.videodir+name, NetflixServer.filtername, downloadsub, NetflixServer.wordmutingmargin, subisvideolang, True)
  52.             # use original language subtitles for muting
  53.             readSrt(NetflixServer.videodir+name+'_original_language', NetflixServer.filtername, downloadsub, subisvideolang, False)
  54.             print 'The subtitles are not in the same language as the video'
  55.     else:
  56.         # filter+mute using local subtitles file
  57.         readSrt(NetflixServer.videodir+name, NetflixServer.filtername, downloadsub, NetflixServer.wordmutingmargin, subisvideolang)
  58.         # rename existing subtitles to original filename
  59.         os.rename(NetflixServer.videodir+name+'.srt', NetflixServer.videodir+originalname)
  60.  
  61. def getMutelist():
  62.     # read ***.mute file in [[starttime][endtime]] format
  63.     global name
  64.     with open(NetflixServer.videodir + name + '.mute', 'r') as mutefile:
  65.         readercsv = reader(mutefile, delimiter='\t')
  66.         readerlist = list(readercsv)
  67.     return [[float(string) for string in inner] for inner in readerlist]
  68.  
  69. def resource_path(relative_path):
  70.     """ Get absolute path to resource, works for dev and for PyInstaller """
  71.     try:
  72.         # PyInstaller creates a temp folder and stores path in _MEIPASS
  73.         base_path = sys._MEIPASS
  74.     except Exception:
  75.         base_path = os.path.abspath(".")
  76.  
  77.     return os.path.join(base_path, relative_path)
  78.    
  79. def mute():
  80.     # mute
  81.     call([resource_path("nircmdc.exe"), "mutesysvolume", "1"], shell=True)
  82.  
  83. def unmute():
  84.     # unmute
  85.     call([resource_path("nircmdc.exe"), "mutesysvolume", "0"], shell=True)
  86.  
  87. def checkWriteable():
  88.     # check if location is writeable (other way?)
  89.     if not os.access(NetflixServer.videodir, os.W_OK | os.X_OK):
  90.         ui.showPopup('No write access to video location')
  91.         exit()
  92.  
  93. class NetflixServer(object):
  94.     videodir = os.getcwd() + '\\'
  95.     filtername = 'filter.txt'
  96.     languages = 'dut, eng'
  97.     interval = 0.1
  98.     wordmutingmargin = 0
  99.  
  100.     # initialize loop
  101.     nowmuted = False
  102.     filtered = False
  103.     mutelist = []
  104.  
  105.     @cherrypy.expose
  106.     def index(self, **params):
  107.         position = float(params['position'])
  108.         duration = float(params['duration'])
  109.         title = params['title']
  110.         eptitle = params['eptitle']
  111.    
  112.         if title:
  113.             if not NetflixServer.filtered:
  114.                 checkWriteable()
  115.                 filterSubtitles(title, eptitle)
  116.                 NetflixServer.mutelist = getMutelist()
  117.                 NetflixServer.filtered = True
  118.            
  119.             for muteitem in NetflixServer.mutelist:
  120.                 if (muteitem[0] - NetflixServer.interval) < position < muteitem[1]:
  121.                     if not NetflixServer.nowmuted:
  122.                         print 'Muting at ' + time.strftime('%H:%M:%S', time.gmtime(position))
  123.                         mute()
  124.                         NetflixServer.nowmuted = True
  125.                     break
  126.             else:
  127.                 if NetflixServer.nowmuted:
  128.                     unmute()
  129.                     NetflixServer.nowmuted = False
  130.             #print 'Current playback time is ' + time.strftime('%H:%M:%S', time.gmtime(position))
  131.  
  132. if __name__ == '__main__':
  133.     cherrypy.config.update({'environment': 'production', 'log.error_file': 'site.log'})
  134.    
  135.     print 'Starting http server...'
  136.     cherrypy.quickstart(NetflixServer())
Advertisement
Add Comment
Please, Sign In to add comment