home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyo (Python 2.4)
-
- import sys
- import os
- import xmlrpclib
- import urllib
- import urllib2
- import unzip
- import globals
- import RecursiveParser
- from xml.dom import minidom
- from utilities import *
- _ = sys.modules['__main__'].__language__
- BASE_URL_XMLRPC_DEV = u'http://dev.opensubtitles.org/xml-rpc'
- BASE_URL_XMLRPC = u'http://www.opensubtitles.org/xml-rpc'
- BASE_URL_SEARCH = u'http://www.opensubtitles.com/%s/search/moviename-%s/simplexml'
- BASE_URL_SEARCH_ALL = u'http://www.opensubtitles.com/en/search/sublanguageid-all/moviename-%s/simplexml'
- BASE_URL_DOWNLOAD = u'http://dev.opensubtitles.org/%s'
- BASE_URL_OSTOK = 'http://app.boxee.tv/api/ostok'
-
- def compare_columns(a, b):
- if not cmp(a['language_name'], b['language_name']):
- pass
- return cmp(b['sync'], a['sync'])
-
-
- class OSDBServer:
-
- def Create(self):
- self.subtitles_list = []
- self.subtitles_hash_list = []
- self.subtitles_name_list = []
- self.subtitles_imdbid_list = []
- self.languages_list = []
- self.folderfilesinfo_list = []
- self.osdb_token = ''
- self.connected = False
- self.smbfile = False
-
-
- def connect(self, osdb_server, username, password):
- LOG(LOG_INFO, 'Connecting to server ' + osdb_server + '...')
-
- try:
- if osdb_server:
- self.server = xmlrpclib.Server(osdb_server)
- info = self.server.ServerInfo()
- socket = urllib.urlopen(BASE_URL_OSTOK)
- result = socket.read()
- socket.close()
- xmldoc = minidom.parseString(result)
- token = xmldoc.getElementsByTagName('token')[0].firstChild.data
- if token:
- self.connected = True
- self.osdb_token = token
- LOG(LOG_INFO, 'Connected')
- return (True, '')
- else:
- self.connected = False
- error = _(653)
- LOG(LOG_ERROR, error)
- return (False, error)
- else:
- self.connected = False
- error = _(730)
- LOG(LOG_ERROR, error)
- return (False, error)
- except Exception:
- e = None
- error = _(731) % (_(732), str(e))
- LOG(LOG_ERROR, error)
- return (False, error)
-
-
-
- def disconnect(self):
-
- try:
- if self.osdb_token and self.connected:
- LOG(LOG_INFO, 'Disconnecting from server...')
- logout = self.server.LogOut(self.osdb_token)
- self.connected = False
- LOG(LOG_DEBUG, logout)
- LOG(LOG_INFO, 'Disconnected')
- return (True, '')
- else:
- error = _(737)
- LOG(LOG_ERROR, error)
- return (False, error)
- except Exception:
- e = None
- error = _(731) % (_(733), str(e))
- LOG(LOG_ERROR, error)
- return (False, error)
-
-
-
- def getlanguages(self):
-
- try:
- if self.connected:
- LOG(LOG_INFO, 'Retrieve subtitle languages...')
- languages = self.server.GetSubLanguages()
- LOG(LOG_INFO, 'Retrieved subtitle languages')
- self.languages_list = []
- if languages['data']:
- for item in languages['data']:
- self.languages_list.append({
- 'language_name': item['LanguageName'],
- 'language': item['SubLanguageID'],
- 'flag_image': 'flags/' + item['ISO639'] + '.png' })
-
-
- return (True, '')
- else:
- error = _(737)
- LOG(LOG_ERROR, error)
- return (False, error)
- except Exception:
- e = None
- error = _(731) % (_(734), str(e))
- LOG(LOG_ERROR, error)
- return (False, error)
-
-
-
- def getfolderfilesinfo(self, folder):
- recursivefiles = []
- hashedfiles_list = []
- hashes_list = []
- self.folderfilesinfo_list = []
-
- try:
- if self.connected and os.path.isdir(folder):
- parser = RecursiveParser.RecursiveParser()
- recursivefiles = parser.getRecursiveFileList(folder, globals.videos_ext)
- for item in recursivefiles:
- filename = globals.EncodeLocale(os.path.basename(item))
- filenameurl = item
- if not os.path.exists(item):
- error = _(738) % (item,)
- LOG(LOG_ERROR, error)
- return (False, error)
- continue
- hash = globals.hashFile(item)
- if hash == 'IOError' or hash == 'SizeError':
- error = _(739) % (item, hash)
- LOG(LOG_ERROR, error)
- return (False, errors)
- continue
- hashedfiles_list.append({
- 'filename': item,
- 'hash': hash })
- hashes_list.append(hash)
-
- if hashedfiles_list:
- hashes = self.server.CheckMovieHash(self.osdb_token, hashes_list)
- for item in hashes_list:
- for file in hashedfiles_list:
- if file['hash'] == item:
- f = file['filename']
- continue
-
- if hashes['data'][item]:
- movie = hashes['data'][item]
- self.folderfilesinfo_list.append({
- 'filename': f,
- 'moviename': movie['MovieName'],
- 'imdbid': movie['MovieImdbID'] })
- continue
-
-
- except Exception:
- e = None
- error = _(731) % (_(735), str(e))
- LOG(LOG_ERROR, error)
- return (False, error)
-
-
-
- def mergesubtitles(self):
- self.subtitles_list = []
- if len(self.subtitles_hash_list) > 0:
- for item in self.subtitles_hash_list:
- if item['format'].find('srt') == 0:
- self.subtitles_list.append(item)
- continue
-
-
- if len(self.subtitles_name_list) > 0:
- for item in self.subtitles_name_list:
- if item['format'].find('srt') == 0:
- self.subtitles_list.append(item)
- continue
-
-
- if len(self.subtitles_imdbid_list) > 0:
- for item in self.subtitles_imdbid_list:
- if item['format'].find('srt') == 0:
- self.subtitles_list.append(item)
- continue
-
-
- if len(self.subtitles_list) > 0:
- self.subtitles_list = sorted(self.subtitles_list, compare_columns)
-
-
-
- def searchsubtitles(self, file, hash, size, language = 'all'):
- self.subtitles_hash_list = []
- self.allow_exception = False
-
- try:
- if self.osdb_token and self.connected:
- LOG(LOG_INFO, 'Searching subtitles by hash for ' + file)
- filename = globals.EncodeLocale(os.path.basename(file))
- videofilesize = size
- linkhtml_index = 'search/moviebytesize-' + str(videofilesize) + '/moviehash-' + hash
- videofilename = filename
- pathvideofilename = file
- videohash = hash
- hashresult = {
- 'hash': hash,
- 'filename': filename,
- 'pathvideofilename': file,
- 'filesize': str(videofilesize),
- 'linkhtml_index': linkhtml_index }
- searchlist = []
- searchlist.append({
- 'sublanguageid': language,
- 'moviehash': hashresult['hash'],
- 'moviebytesize': str(hashresult['filesize']) })
- search = self.server.SearchSubtitles(self.osdb_token, searchlist)
- if search['data']:
- for item in search['data']:
- if item['ISO639']:
- flag_image = 'flags/' + item['ISO639'] + '.png'
- else:
- flag_image = '-.png'
- self.subtitles_hash_list.append({
- 'filename': item['SubFileName'],
- 'link': item['ZipDownloadLink'],
- 'language_name': item['LanguageName'],
- 'language_flag': flag_image,
- 'language_id': item['SubLanguageID'],
- 'ID': item['IDSubtitle'],
- 'rating': str(int(item['SubRating'][0])),
- 'format': item['SubFormat'],
- 'sync': True })
-
- self.subtitles_list.append(self.subtitles_hash_list)
- message = _(742) % (str(len(self.subtitles_hash_list)),)
- LOG(LOG_INFO, message)
- return (True, message)
- else:
- message = _(741)
- LOG(LOG_INFO, message)
- return (True, message)
- except Exception:
- e = None
- error = _(731) % (_(736), str(e))
- LOG(LOG_ERROR, error)
- return (False, error)
-
-
-
- def searchsubtitlesbyhash(self, file, language = 'all'):
- self.subtitles_hash_list = []
- self.allow_exception = False
-
- try:
- if self.osdb_token and self.connected:
- LOG(LOG_INFO, 'Searching subtitles by hash for ' + file)
- if file.find('//') == 0:
- error = _(740)
- LOG(LOG_ERROR, error)
- return (False, error)
-
- filename = globals.EncodeLocale(os.path.basename(file))
- filenameurl = filename
- if not os.path.exists(file):
- error = _(738) % (file,)
- LOG(LOG_ERROR, error)
- return (False, error)
- else:
- hash = globals.hashFile(file)
- if hash == 'IOError' or hash == 'SizeError':
- error = _(739) % (file, hash)
- LOG(LOG_ERROR, error)
- return (False, error)
-
- videofilesize = os.path.getsize(file)
- linkhtml_index = 'search/moviebytesize-' + str(videofilesize) + '/moviehash-' + hash
- videofilename = filename
- pathvideofilename = file
- videohash = hash
- hashresult = {
- 'hash': hash,
- 'filename': filename,
- 'pathvideofilename': file,
- 'filesize': str(videofilesize),
- 'linkhtml_index': linkhtml_index }
- searchlist = []
- searchlist.append({
- 'sublanguageid': language,
- 'moviehash': hashresult['hash'],
- 'moviebytesize': str(hashresult['filesize']) })
- search = self.server.SearchSubtitles(self.osdb_token, searchlist)
- if search['data']:
- for item in search['data']:
- if item['ISO639']:
- flag_image = 'flags/' + item['ISO639'] + '.png'
- else:
- flag_image = '-.png'
- self.subtitles_hash_list.append({
- 'filename': item['SubFileName'],
- 'link': item['ZipDownloadLink'],
- 'language_name': item['LanguageName'],
- 'language_flag': flag_image,
- 'language_id': item['SubLanguageID'],
- 'ID': item['IDSubtitle'],
- 'rating': str(int(item['SubRating'][0])),
- 'format': item['SubFormat'],
- 'sync': True })
-
- self.subtitles_list.append(self.subtitles_hash_list)
- message = _(742) % (str(len(self.subtitles_hash_list)),)
- LOG(LOG_INFO, message)
- return (True, message)
- else:
- message = _(741)
- LOG(LOG_INFO, message)
- return (True, message)
- except Exception:
- e = None
- error = _(731) % (_(736), str(e))
- LOG(LOG_ERROR, error)
- return (False, error)
-
-
-
- def searchsubtitlesbyimdbid(self, imdbid, language = 'all'):
- self.subtitles_imdbid_list = []
- self.allow_exception = False
-
- try:
- if self.osdb_token and self.connected:
- LOG(LOG_INFO, 'Searching subtitles by imdbid for ' + imdbid)
- if file.find('//') == 0:
- error = _(740)
- LOG(LOG_ERROR, error)
- return (False, error)
-
- filename = globals.EncodeLocale(os.path.basename(file))
- filenameurl = filename
- if not os.path.exists(file):
- error = _(738) % (file,)
- LOG(LOG_ERROR, error)
- return (False, error)
- else:
- hash = globals.hashFile(file)
- if hash == 'IOError' or hash == 'SizeError':
- error = _(739) % (file, hash)
- LOG(LOG_ERROR, error)
- return (False, error)
-
- videofilesize = os.path.getsize(file)
- linkhtml_index = 'search/moviebytesize-' + str(videofilesize) + '/moviehash-' + hash
- videofilename = filename
- pathvideofilename = file
- videohash = hash
- hashresult = {
- 'hash': hash,
- 'filename': filename,
- 'pathvideofilename': file,
- 'filesize': str(videofilesize),
- 'linkhtml_index': linkhtml_index }
- searchlist = []
- searchlist.append({
- 'sublanguageid': language,
- 'moviehash': hashresult['hash'],
- 'moviebytesize': str(hashresult['filesize']) })
- search = self.server.SearchSubtitles(self.osdb_token, searchlist)
- if search['data']:
- for item in search['data']:
- if item['ISO639']:
- flag_image = 'flags/' + item['ISO639'] + '.png'
- else:
- flag_image = '-.png'
- self.subtitles_imdbid_list.append({
- 'filename': item['SubFileName'],
- 'link': item['ZipDownloadLink'],
- 'language_name': item['LanguageName'],
- 'language_flag': flag_image,
- 'language_id': item['SubLanguageID'],
- 'ID': item['IDSubtitle'],
- 'rating': str(int(item['SubRating'][0])),
- 'format': item['SubFormat'],
- 'sync': True })
-
- self.subtitles_list.append(self.subtitles_imdbid_list)
- message = _(742) % (str(len(self.subtitles_imdbid_list)),)
- LOG(LOG_INFO, message)
- return (True, message)
- else:
- message = _(741)
- LOG(LOG_INFO, message)
- return (True, message)
- except Exception:
- e = None
- error = _(731) % (_(736), str(e))
- LOG(LOG_ERROR, error)
- return (False, error)
-
-
-
- def searchsubtitlesbyname(self, name, language = 'all'):
- self.subtitles_name_list = []
- self.allow_exception = False
- search_url = ''
-
- try:
- LOG(LOG_INFO, 'Searching subtitles by name for ' + name)
- if language == 'all':
- search_url = BASE_URL_SEARCH_ALL % (os.path.basename(name),)
- else:
- search_url = BASE_URL_SEARCH % (language, os.path.basename(name))
- search_url.replace(' ', '+')
- LOG(LOG_INFO, search_url)
- socket = urllib.urlopen(search_url)
- result = socket.read()
- socket.close()
- xmldoc = minidom.parseString(result)
- subtitles = xmldoc.getElementsByTagName('subtitle')
- if subtitles:
- url_base = xmldoc.childNodes[0].childNodes[1].firstChild.data
- for subtitle in subtitles:
- filename = ''
- movie = ''
- lang_name = ''
- subtitle_id = ''
- lang_id = ''
- flag_image = ''
- link = ''
- if subtitle.getElementsByTagName('releasename')[0].firstChild:
- filename = subtitle.getElementsByTagName('releasename')[0].firstChild.data
-
- if subtitle.getElementsByTagName('format')[0].firstChild:
- format = subtitle.getElementsByTagName('format')[0].firstChild.data
- filename = filename + '.' + format
-
- if subtitle.getElementsByTagName('movie')[0].firstChild:
- movie = subtitle.getElementsByTagName('movie')[0].firstChild.data
-
- if subtitle.getElementsByTagName('language')[0].firstChild:
- lang_name = subtitle.getElementsByTagName('language')[0].firstChild.data
-
- if subtitle.getElementsByTagName('idsubtitle')[0].firstChild:
- subtitle_id = subtitle.getElementsByTagName('idsubtitle')[0].firstChild.data
-
- if subtitle.getElementsByTagName('iso639')[0].firstChild:
- lang_id = subtitle.getElementsByTagName('iso639')[0].firstChild.data
- flag_image = 'flags/' + lang_id + '.png'
-
- if subtitle.getElementsByTagName('download')[0].firstChild:
- link = subtitle.getElementsByTagName('download')[0].firstChild.data
- link = url_base + link
-
- if subtitle.getElementsByTagName('subrating')[0].firstChild:
- rating = subtitle.getElementsByTagName('subrating')[0].firstChild.data
-
- self.subtitles_name_list.append({
- 'filename': filename,
- 'link': link,
- 'language_name': lang_name,
- 'language_id': lang_id,
- 'language_flag': flag_image,
- 'movie': movie,
- 'ID': subtitle_id,
- 'rating': str(int(rating[0])),
- 'format': format,
- 'sync': False })
-
- self.subtitles_list.append(self.subtitles_name_list)
- message = _(742) % (str(len(self.subtitles_name_list)),)
- LOG(LOG_INFO, message)
- return (True, message)
- else:
- message = _(741)
- LOG(LOG_INFO, message)
- return (True, message)
- except Exception:
- e = None
- error = _(743) % (search_url, str(e))
- LOG(LOG_ERROR, error)
- return (False, error)
-
-
-
-