def library(self): self.addDirectoryItem(32557, 'openSettings&query=4.0', 'tools.png', 'DefaultAddonProgram.png') self.addDirectoryItem(32558, 'updateLibrary&query=tool', 'library_update.png', 'DefaultAddonProgram.png') self.addDirectoryItem(32559, control.setting('library.movie'), 'movies.png', 'DefaultMovies.png', isAction=False) self.addDirectoryItem(32560, control.setting('library.tv'), 'tvshows.png', 'DefaultTVShows.png', isAction=False) if trakt.getTraktCredentialsInfo(): self.addDirectoryItem(32561, 'moviesToLibrary&url=traktcollection', 'trakt.png', 'DefaultMovies.png') self.addDirectoryItem(32562, 'moviesToLibrary&url=traktwatchlist', 'trakt.png', 'DefaultMovies.png') self.addDirectoryItem(32563, 'tvshowsToLibrary&url=traktcollection', 'trakt.png', 'DefaultTVShows.png') self.addDirectoryItem(32564, 'tvshowsToLibrary&url=traktwatchlist', 'trakt.png', 'DefaultTVShows.png') self.endDirectory()
def root(self): self.addDirectoryItem(32001, 'movieNavigator', 'movies.png', 'DefaultMovies.png') self.addDirectoryItem(32002, 'tvNavigator', 'tvshows.png', 'DefaultTVShows.png') if not control.setting('lists.widget') == '0': self.addDirectoryItem(32003, 'mymovieNavigator', 'mymovies.png', 'DefaultVideoPlaylists.png') self.addDirectoryItem(32004, 'mytvNavigator', 'mytvshows.png', 'DefaultVideoPlaylists.png') if not control.setting('movie.widget') == '0': self.addDirectoryItem(32005, 'movieWidget', 'latest-movies.png', 'DefaultRecentlyAddedMovies.png') self.addDirectoryItem(32007, 'channels', 'calendar.png', 'DefaultMovies.png') if (traktIndicators == True and not control.setting('tv.widget.alt') == '0') or (traktIndicators == False and not control.setting('tv.widget') == '0'): self.addDirectoryItem(32006, 'tvWidget', 'latest-episodes.png', 'DefaultRecentlyAddedEpisodes.png') if traktCredentials == True: self.addDirectoryItem(32620, 'movies&url=traktwatchlist', 'movies_watchlist.png', 'DefaultMovies.png', queue=True, context=(32551, 'moviesToLibrary&url=traktwatchlist')) self.addDirectoryItem(32621, 'tvshows&url=traktwatchlist', 'tvshows_watchlist.png', 'DefaultTVShows.png', context=(32551, 'tvshowsToLibrary&url=traktwatchlist')) self.addDirectoryItem(32008, 'toolNavigator', 'tools.png', 'DefaultAddonProgram.png') downloads = True if control.setting('downloads') == 'true' and (len(control.listDir(control.setting('movie.download.path'))[0]) > 0 or len(control.listDir(control.setting('tv.download.path'))[0]) > 0) else False if downloads == True: self.addDirectoryItem(32009, 'downloadNavigator', 'downloads.png', 'DefaultFolder.png') self.addDirectoryItem(32010, 'searchNavigator', 'search.png', 'DefaultFolder.png') self.endDirectory()
def __init__(self): self.priority = 1 self.language = ['en'] self.domains = ['streamlord.com'] self.base_link = 'http://www.streamlord.com' self.search_link = '/searchtest.php' self.user = control.setting('streamlord.user') self.password = control.setting('streamlord.pass')
def __init__(self): self.priority = 1 self.language = ['pl'] self.domains = ['segos.es'] self.user_name = control.setting('segos.username') self.user_pass = control.setting('segos.password') self.base_link = 'https://segos.es' self.search_link = '/?search=%s'
def __init__(self): self.priority = 1 self.language = ['en'] self.domains = ['moviesplanet.is', 'moviesplanet.tv'] self.base_link = 'https://www.moviesplanet.tv' self.search_link = '/ajax/search.php' self.user = control.setting('moviesplanet.user') self.password = control.setting('moviesplanet.pass')
def __init__(self): self.library_folder = os.path.join( control.transPath(control.setting('library.movie')), '') self.check_setting = control.setting('library.check_movie') or 'false' self.library_setting = control.setting('library.update') or 'true' self.dupe_setting = control.setting('library.check') or 'true' self.silentDialog = False self.infoDialog = False
def downloads(self): movie_downloads = control.setting('movie.download.path') tv_downloads = control.setting('tv.download.path') if len(control.listDir(movie_downloads)[0]) > 0: self.addDirectoryItem(32001, movie_downloads, 'movies.png', 'DefaultMovies.png', isAction=False) if len(control.listDir(tv_downloads)[0]) > 0: self.addDirectoryItem(32002, tv_downloads, 'tvshows.png', 'DefaultTVShows.png', isAction=False) self.endDirectory()
def __init__(self): self.priority = 0 self.language = ['en'] self.domain = 'furk.net/' self.base_link = 'https://www.furk.net' self.meta_search_link = "/api/plugins/metasearch?api_key=%s&q=%s&cached=yes" \ "&match=%s&moderated=%s%s&sort=relevance&type=video&offset=0&limit=%s" self.tfile_link = "/api/file/get?api_key=%s&t_files=1&id=%s" self.login_link = "/api/login/login?login=%s&pwd=%s" self.user_name = control.setting('furk.user') self.user_pass = control.setting('furk.pass') self.api_key = control.setting('furk.api') self.search_limit = control.setting('furk.limit') self.mod_level = control.setting('furk.mod.level').lower()
def get(self, name, year='0'): try: offset = '0' if not control.setting('bookmarks') == 'true': raise Exception() idFile = hashlib.md5() for i in name: idFile.update(str(i)) for i in year: idFile.update(str(i)) idFile = str(idFile.hexdigest()) dbcon = database.connect(control.bookmarksFile) dbcur = dbcon.cursor() dbcur.execute("SELECT * FROM bookmark WHERE idFile = '%s'" % idFile) match = dbcur.fetchone() self.offset = str(match[1]) dbcon.commit() if self.offset == '0': raise Exception() minutes, seconds = divmod(float(self.offset), 60) ; hours, minutes = divmod(minutes, 60) label = '%02d:%02d:%02d' % (hours, minutes, seconds) label = (control.lang(32502) % label).encode('utf-8') try: yes = control.dialog.contextmenu([label, control.lang(32501).encode('utf-8'), ]) except: yes = control.yesnoDialog(label, '', '', str(name), control.lang(32503).encode('utf-8'), control.lang(32501).encode('utf-8')) if yes: self.offset = '0' return self.offset except: return offset
def __init__(self): self.library_folder = os.path.join( control.transPath(control.setting('library.tv')), '') self.library_setting = control.setting('library.update') or 'true' self.include_unknown = control.setting( 'library.include_unknown') or 'true' self.property = '%s_service_property' % control.addonInfo( 'name').lower() self.datetime = (datetime.datetime.utcnow() - datetime.timedelta(hours=5)) self.date = (self.datetime - datetime.timedelta(hours=24)).strftime('%Y%m%d') self.infoDialog = False
def onPlayBackStopped(self): bookmarks().reset(self.currentTime, self.totalTime, self.name, self.year) if control.setting('crefresh') == 'true': xbmc.executebuiltin('Container.Refresh') try: if (self.currentTime / self.totalTime) >= .90: self.libForPlayback() except: pass
def __init__(self): self.priority = 1 self.language = ['en'] self.domains = ['ororo.tv'] self.base_link = 'https://ororo.tv' self.moviesearch_link = '/api/v2/movies' self.tvsearch_link = '/api/v2/shows' self.movie_link = '/api/v2/movies/%s' self.show_link = '/api/v2/shows/%s' self.episode_link = '/api/v2/episodes/%s' self.user = control.setting('ororo.user') self.password = control.setting('ororo.pass') self.headers = { 'Authorization': 'Basic %s' % base64.b64encode('%s:%s' % (self.user, self.password)), 'User-Agent': 'Incursion for Kodi' }
def __init__(self): self.library_folder = os.path.join( control.transPath(control.setting('library.tv')), '') self.version = control.version() self.check_setting = control.setting( 'library.check_episode') or 'false' self.include_unknown = control.setting( 'library.include_unknown') or 'true' self.library_setting = control.setting('library.update') or 'true' self.dupe_setting = control.setting('library.check') or 'true' self.datetime = (datetime.datetime.utcnow() - datetime.timedelta(hours=5)) self.date = (self.datetime - datetime.timedelta(hours=24)).strftime('%Y%m%d') self.silentDialog = False self.infoDialog = False self.block = False
def __init__(self): self.priority = 0 self.language = ['en'] self.domain = 'chillax.ws' self.base_link = 'http://chillax.ws' self.search_link = 'http://chillax.ws/search/auto?q=' self.movie_link = "http://chillax.ws/movies/getMovieLink?" self.login_link = 'http://chillax.ws/session/login?return_url=/index' self.tv_link = 'http://chillax.ws/series/getTvLink?' self.login_payload = {'username': control.setting('chillax.username'),'password':control.setting('chillax.password')} if self.login_payload['username'] == '': self.login_payload = {'username': '******','password':'******'}
def log(msg, level=LOGDEBUG): req_level = level # override message level to force logging when addon logging turned on if control.setting('addon_debug') == 'true' and level == LOGDEBUG: level = LOGNOTICE try: if isinstance(msg, unicode): msg = '%s (ENCODED)' % (msg.encode('utf-8')) xbmc.log('[%s] %s' % (name, msg), level) except Exception as e: try: xbmc.log('Logging Failure: %s' % (e), level) except: pass # just give up
def tvshows(self, lite=False): self.addDirectoryItem(32011, 'tvGenres', 'genres.png', 'DefaultTVShows.png') self.addDirectoryItem(32016, 'tvNetworks', 'networks.png', 'DefaultTVShows.png') self.addDirectoryItem(32014, 'tvLanguages', 'languages.png', 'DefaultTVShows.png') self.addDirectoryItem(32015, 'tvCertificates', 'certificates.png', 'DefaultTVShows.png') self.addDirectoryItem(32017, 'tvshows&url=trending', 'people-watching.png', 'DefaultRecentlyAddedEpisodes.png') self.addDirectoryItem(32018, 'tvshows&url=popular', 'most-popular.png', 'DefaultTVShows.png') self.addDirectoryItem(32023, 'tvshows&url=rating', 'highly-rated.png', 'DefaultTVShows.png') self.addDirectoryItem(32019, 'tvshows&url=views', 'most-voted.png', 'DefaultTVShows.png') self.addDirectoryItem(32024, 'tvshows&url=airing', 'airing-today.png', 'DefaultTVShows.png') #self.addDirectoryItem(32025, 'tvshows&url=active', 'returning-tvshows.png', 'DefaultTVShows.png') self.addDirectoryItem(32026, 'tvshows&url=premiere', 'new-tvshows.png', 'DefaultTVShows.png') self.addDirectoryItem(32006, 'calendar&url=added', 'latest-episodes.png', 'DefaultRecentlyAddedEpisodes.png', queue=True) self.addDirectoryItem(32027, 'calendars', 'calendar.png', 'DefaultRecentlyAddedEpisodes.png') if lite == False: if not control.setting('lists.widget') == '0': self.addDirectoryItem(32004, 'mytvliteNavigator', 'mytvshows.png', 'DefaultVideoPlaylists.png') self.addDirectoryItem(32028, 'tvPerson', 'people-search.png', 'DefaultTVShows.png') self.addDirectoryItem(32010, 'tvSearch', 'search.png', 'DefaultTVShows.png') self.endDirectory()
def reset(self, currentTime, totalTime, name, year='0'): try: if not control.setting('bookmarks') == 'true': raise Exception() timeInSeconds = str(currentTime) ok = int(currentTime) > 180 and (currentTime / totalTime) <= .92 idFile = hashlib.md5() for i in name: idFile.update(str(i)) for i in year: idFile.update(str(i)) idFile = str(idFile.hexdigest()) control.makeFile(control.dataPath) dbcon = database.connect(control.bookmarksFile) dbcur = dbcon.cursor() dbcur.execute("CREATE TABLE IF NOT EXISTS bookmark (""idFile TEXT, ""timeInSeconds TEXT, ""UNIQUE(idFile)"");") dbcur.execute("DELETE FROM bookmark WHERE idFile = '%s'" % idFile) if ok: dbcur.execute("INSERT INTO bookmark Values (?, ?)", (idFile, timeInSeconds)) dbcon.commit() except: pass
def movies(self, lite=False): self.addDirectoryItem(32011, 'movieGenres', 'genres.png', 'DefaultMovies.png') self.addDirectoryItem(32012, 'movieYears', 'years.png', 'DefaultMovies.png') self.addDirectoryItem(32013, 'moviePersons', 'people.png', 'DefaultMovies.png') self.addDirectoryItem(32014, 'movieLanguages', 'languages.png', 'DefaultMovies.png') self.addDirectoryItem(32015, 'movieCertificates', 'certificates.png', 'DefaultMovies.png') self.addDirectoryItem(32017, 'movies&url=trending', 'people-watching.png', 'DefaultRecentlyAddedMovies.png') self.addDirectoryItem(32018, 'movies&url=popular', 'most-popular.png', 'DefaultMovies.png') self.addDirectoryItem(32019, 'movies&url=views', 'most-voted.png', 'DefaultMovies.png') self.addDirectoryItem(32020, 'movies&url=boxoffice', 'box-office.png', 'DefaultMovies.png') self.addDirectoryItem(32021, 'movies&url=oscars', 'oscar-winners.png', 'DefaultMovies.png') self.addDirectoryItem(32022, 'movies&url=theaters', 'in-theaters.png', 'DefaultRecentlyAddedMovies.png') self.addDirectoryItem(32005, 'movieWidget', 'latest-movies.png', 'DefaultRecentlyAddedMovies.png') if lite == False: if not control.setting('lists.widget') == '0': self.addDirectoryItem(32003, 'mymovieliteNavigator', 'mymovies.png', 'DefaultVideoPlaylists.png') self.addDirectoryItem(32028, 'moviePerson', 'people-search.png', 'DefaultMovies.png') self.addDirectoryItem(32010, 'movieSearch', 'search.png', 'DefaultMovies.png') self.endDirectory()
def getTraktIndicatorsInfo(): indicators = control.setting('indicators') if getTraktCredentialsInfo( ) == False else control.setting('indicators.alt') indicators = True if indicators == '1' else False return indicators
log_utils.LOGNOTICE) except: log_utils.log( '######################### FANFILM ############################', log_utils.LOGNOTICE) log_utils.log( '####### CURRENT FANFILM VERSIONS REPORT ######################', log_utils.LOGNOTICE) log_utils.log( '### ERROR GETTING FANFILM VERSIONS - NO HELP WILL BE GIVEN AS THIS IS NOT AN OFFICIAL FANFILM INSTALL. ###', log_utils.LOGNOTICE) log_utils.log( '###############################################################', log_utils.LOGNOTICE) if control.setting('autoTraktOnStart') == 'true': syncTraktLibrary() if int(control.setting('schedTraktTime')) > 0: log_utils.log( '###############################################################', log_utils.LOGNOTICE) log_utils.log( '#################### STARTING TRAKT SCHEDULING ################', log_utils.LOGNOTICE) log_utils.log( '#################### SCHEDULED TIME FRAME ' + control.setting('schedTraktTime') + ' HOURS ################', log_utils.LOGNOTICE) timeout = 3600 * int(control.setting('schedTraktTime')) schedTrakt = threading.Timer(timeout, syncTraktLibrary)
def __getTrakt(url, post=None): try: url = urlparse.urljoin(BASE_URL, url) post = json.dumps(post) if post else None headers = { 'Content-Type': 'application/json', 'trakt-api-key': V2_API_KEY, 'trakt-api-version': 2 } if getTraktCredentialsInfo(): headers.update({ 'Authorization': 'Bearer %s' % control.setting('trakt.token') }) result = client.request(url, post=post, headers=headers, output='extended', error=True) resp_code = result[1] resp_header = result[2] result = result[0] if resp_code in [ '500', '502', '503', '504', '520', '521', '522', '524' ]: log_utils.log('Temporary Trakt Error: %s' % resp_code, log_utils.LOGWARNING) return elif resp_code in ['404']: log_utils.log('Object Not Found : %s' % resp_code, log_utils.LOGWARNING) return elif resp_code in ['429']: log_utils.log('Trakt Rate Limit Reached: %s' % resp_code, log_utils.LOGWARNING) return if resp_code not in ['401', '405']: return result, resp_header oauth = urlparse.urljoin(BASE_URL, '/oauth/token') opost = { 'client_id': V2_API_KEY, 'client_secret': CLIENT_SECRET, 'redirect_uri': REDIRECT_URI, 'grant_type': 'refresh_token', 'refresh_token': control.setting('trakt.refresh') } result = client.request(oauth, post=json.dumps(opost), headers=headers) result = utils.json_loads_as_str(result) token, refresh = result['access_token'], result['refresh_token'] control.setSetting(id='trakt.token', value=token) control.setSetting(id='trakt.refresh', value=refresh) headers['Authorization'] = 'Bearer %s' % token result = client.request(url, post=post, headers=headers, output='extended', error=True) return result[0], result[2] except Exception as e: log_utils.log('Unknown Trakt Error: %s' % e, log_utils.LOGWARNING) pass
def getDirectory(name, url, audio, image, fanart, playable, content, close=True, local=False): if local == True: f = control.openFile(url) result = f.read() f.close() else: result = cache.get(client.request, 0, url) result = str(result).replace('\r', '').replace('\n', '').replace( '\t', '').replace(' ', '') try: fanart = re.findall('<fanart>(.+?)</fanart>', result)[0] except: fanart = '0' try: notify = re.compile('<notify>(.+?)</notify>').findall(result)[0] vip = re.findall('<poster>(.+?)</poster>', result)[0] if not re.search('[a-zA-Z]', vip): raise Exception() def message(vip): return (vip + version) check = cache.get(message, 600000000, vip, table='rel_vip') version = re.findall('<new>(.+?)</new>', notify)[0] if not version.isdigit(): raise Exception() if check == (vip + version): raise Exception() title = '[B]Announcement From %s![/B]' % vip msg1 = re.findall('<message1>(.+?)</message1>', notify)[0] msg2 = re.findall('<message2>(.+?)</message2>', notify)[0] msg3 = re.findall('<message3>(.+?)</message3>', notify)[0] check = cache.get(message, 0, vip, table='rel_vip') control.dialog.ok(str(title), str(msg1), str(msg2), str(msg3)) except: pass infos = re.compile('<info>(.+?)</info>').findall(result) for info in infos: try: name = re.findall('<message>(.+?)</message>', info)[0] try: image = re.findall('<thumbnail>(.+?)</thumbnail>', info)[0] except: image = '0' addDirectoryItem(name, '0', '0', image, image, fanart, '0', '0', {}) except: pass popups = re.compile('<popup>(.+?)</popup>').findall(result) for popup in popups: try: name = re.findall('<name>(.+?)</name>', popup)[0] url = re.findall('<popImage>(.+?)</popImage>', popup)[0] try: image = re.findall('<thumbnail>(.+?)</thumbnail>', popup)[0] except: image = '0' try: audio = re.findall('<sound>(.+?)</sound>', popup)[0] except: audio = '0' addDirectoryItem(name, url, 'openDialog', image, image, fanart, audio, '0', {}) except: pass special = re.compile( '<name>([^<]+)</name><link>([^<]+)</link><thumbnail>([^<]+)</thumbnail><date>([^<]+)</date>' ).findall(result) for name, url, image, date in special: if re.search(r'\d+', date): name += ' [COLOR red] Updated %s[/COLOR]' % date addDirectoryItem(name, url, 'ndmode', image, image, fanart, '0', '0', {}) special = re.compile( '<name>([^<]+)</name><link>([^<]+)</link><thumbnail>([^<]+)</thumbnail><mode>([^<]+)</mode>' ).findall(result) for name, url, image, action in special: addDirectoryItem(name, url, action, image, image, fanart, '0', '0', {}) meta = False try: content = re.findall('<meta>(.+?)</meta>', result)[0] except: content = '0' try: tvshow = re.findall('<tvshow>(.+?)</tvshow>', result)[0] except: tvshow = '0' if content in ['seasons', 'episodes'] and tvshow == '0': content = '0' if content in ['movies', 'tvshows'] and control.setting('meta') == 'true': try: from metahandler import metahandlers metaget = metahandlers.MetaData(preparezip=False) meta = True except: meta = False elif content in ['seasons', 'episodes']: try: from metahandler import metahandlers metaget = metahandlers.MetaData(preparezip=False) #tvd = metaget.get_meta('tvshow', tvshow) tvd = cachemeta.get(metaget.get_meta, 24, 'tvshow', tvshow, '', '', '') except: tvd = {} dirs = re.compile('<dir>(.+?)</dir>').findall(result) totalItems = len(dirs) for dir in dirs: try: data = {} name = re.findall('<name>(.+?)</name>', dir)[0] url = re.findall('<link>(.+?)</link>', dir)[0] try: image = re.findall('<thumbnail>(.+?)</thumbnail>', dir)[0] except: image = '0' try: fanart2 = re.findall('<fanart>(.+?)</fanart>', dir)[0] except: fanart2 = fanart if meta == True and content == 'tvshows': try: title = cleantitle(name).encode('utf-8') data = {'title': title, 'tvshowtitle': title} #data = metaget.get_meta('tvshow', title) data = cachemeta.get(metaget.get_meta, 24, 'tvshow', title, '', '', '') metafanart = data['backdrop_url'] if not metafanart == '': fanart2 = metafanart except: pass elif content == 'tvshows': try: title = cleantitle(name).encode('utf-8') data = {'title': title, 'tvshowtitle': title} except: pass elif content == 'seasons': try: title = cleantitle(tvshow).encode('utf-8') data = {'title': title, 'tvshowtitle': title} data.update(tvd) metafanart = tvd['backdrop_url'] if not metafanart == '': fanart2 = metafanart except: pass addDirectoryItem(name, url, 'ndmode', image, image, fanart2, '0', content, data, totalItems=totalItems) except: pass items = re.compile('<item>(.+?)</item>').findall(result) try: sort = re.findall('<sort>(.+?)</sort>', result)[0] except: sort = '' if sort == 'yes': items = sorted(items) totalItems = len(items) for item in items: try: data = {} name = re.findall('<title>(.+?)</title>', item)[0] url = re.findall('<link>(.+?)</link>', item)[0] try: image = image2 = re.findall('<thumbnail>(.+?)</thumbnail>', item)[0] except: image = image2 = '0' try: fanart2 = re.findall('<fanart>(.+?)</fanart>', item)[0] except: fanart2 = fanart if meta == True and content == 'movies': try: title = cleantitle(name).encode('utf-8') data = {'title': title} title, year = re.compile('(.+?)[(](\d{4})[)]').findall( name)[0] title = cleantitle(title).encode('utf-8') data = {'title': title, 'year': year} #data = metaget.get_meta('movie', title, year=year) data = cachemeta.get(metaget.get_meta, 24, 'movie', title, '', '', year) metaimage = data['cover_url'] if not metaimage == '': image = metaimage metafanart = data['backdrop_url'] if not metafanart == '': fanart2 = metafanart except: pass elif content == 'movies': try: title = cleantitle(name).encode('utf-8') data = {'title': title} title, year = re.compile('(.+?)[(](\d{4})[)]').findall( name)[0] title = cleantitle(title).encode('utf-8') data = {'title': title, 'year': year} except: pass elif content == 'episodes': try: title = cleantitle(name).encode('utf-8') data = {'title': title, 'tvshowtitle': tvshow} except: pass try: i = cleaneptitle(tvshow, title) title, season, episode = i[0].encode('utf-8'), i[1], i[2] data = { 'title': title, 'tvshowtitle': tvshow, 'season': season, 'episode': episode } except: pass try: data.update({ 'year': tvd['year'], 'imdb_id': tvd['imdb_id'], 'tvdb_id': tvd['tvdb_id'], 'tvshowtitle': tvd['TVShowTitle'], 'genre': tvd['genre'], 'studio': tvd['studio'], 'status': tvd['status'], 'duration': tvd['duration'], 'rating': tvd['rating'], 'mpaa': tvd['mpaa'], 'plot': tvd['plot'], 'cast': tvd['cast'] }) metafanart = tvd['backdrop_url'] if not metafanart == '': image = fanart2 = metafanart except: pass if 'sublink' in url: addDirectoryItem(name, url, 'subDirectory', image, image2, fanart2, '0', content, data, tvshow=tvshow, totalItems=totalItems, isFolder=True) else: addDirectoryItem(name, url, 'resolveUrl', image, image2, fanart2, '0', content, data, totalItems=totalItems, isFolder=False) except: pass endDirectory(content, close)
def get(self, name, imdb, season, episode): try: if not control.setting('subtitles') == 'true': raise Exception() langDict = {'Afrikaans': 'afr', 'Albanian': 'alb', 'Arabic': 'ara', 'Armenian': 'arm', 'Basque': 'baq', 'Bengali': 'ben', 'Bosnian': 'bos', 'Breton': 'bre', 'Bulgarian': 'bul', 'Burmese': 'bur', 'Catalan': 'cat', 'Chinese': 'chi', 'Croatian': 'hrv', 'Czech': 'cze', 'Danish': 'dan', 'Dutch': 'dut', 'English': 'eng', 'Esperanto': 'epo', 'Estonian': 'est', 'Finnish': 'fin', 'French': 'fre', 'Galician': 'glg', 'Georgian': 'geo', 'German': 'ger', 'Greek': 'ell', 'Hebrew': 'heb', 'Hindi': 'hin', 'Hungarian': 'hun', 'Icelandic': 'ice', 'Indonesian': 'ind', 'Italian': 'ita', 'Japanese': 'jpn', 'Kazakh': 'kaz', 'Khmer': 'khm', 'Korean': 'kor', 'Latvian': 'lav', 'Lithuanian': 'lit', 'Luxembourgish': 'ltz', 'Macedonian': 'mac', 'Malay': 'may', 'Malayalam': 'mal', 'Manipuri': 'mni', 'Mongolian': 'mon', 'Montenegrin': 'mne', 'Norwegian': 'nor', 'Occitan': 'oci', 'Persian': 'per', 'Polish': 'pol', 'Portuguese': 'por,pob', 'Portuguese(Brazil)': 'pob,por', 'Romanian': 'rum', 'Russian': 'rus', 'Serbian': 'scc', 'Sinhalese': 'sin', 'Slovak': 'slo', 'Slovenian': 'slv', 'Spanish': 'spa', 'Swahili': 'swa', 'Swedish': 'swe', 'Syriac': 'syr', 'Tagalog': 'tgl', 'Tamil': 'tam', 'Telugu': 'tel', 'Thai': 'tha', 'Turkish': 'tur', 'Ukrainian': 'ukr', 'Urdu': 'urd'} codePageDict = {'ara': 'cp1256', 'ar': 'cp1256', 'ell': 'cp1253', 'el': 'cp1253', 'heb': 'cp1255', 'he': 'cp1255', 'tur': 'cp1254', 'tr': 'cp1254', 'rus': 'cp1251', 'ru': 'cp1251'} quality = ['bluray', 'hdrip', 'brrip', 'bdrip', 'dvdrip', 'webrip', 'hdtv'] langs = [] try: try: langs = langDict[control.setting('subtitles.lang.1')].split(',') except: langs.append(langDict[control.setting('subtitles.lang.1')]) except: pass try: try: langs = langs + langDict[control.setting('subtitles.lang.2')].split(',') except: langs.append(langDict[control.setting('subtitles.lang.2')]) except: pass try: subLang = xbmc.Player().getSubtitles() except: subLang = '' if subLang == langs[0]: raise Exception() server = xmlrpclib.Server('http://api.opensubtitles.org/xml-rpc', verbose=0) token = server.LogIn('', '', 'en', 'XBMC_Subtitles_v1')['token'] sublanguageid = ','.join(langs) ; imdbid = re.sub('[^0-9]', '', imdb) if not (season == None or episode == None): result = server.SearchSubtitles(token, [{'sublanguageid': sublanguageid, 'imdbid': imdbid, 'season': season, 'episode': episode}])['data'] fmt = ['hdtv'] else: result = server.SearchSubtitles(token, [{'sublanguageid': sublanguageid, 'imdbid': imdbid}])['data'] try: vidPath = xbmc.Player().getPlayingFile() except: vidPath = '' fmt = re.split('\.|\(|\)|\[|\]|\s|\-', vidPath) fmt = [i.lower() for i in fmt] fmt = [i for i in fmt if i in quality] filter = [] result = [i for i in result if i['SubSumCD'] == '1'] for lang in langs: filter += [i for i in result if i['SubLanguageID'] == lang and any(x in i['MovieReleaseName'].lower() for x in fmt)] filter += [i for i in result if i['SubLanguageID'] == lang and any(x in i['MovieReleaseName'].lower() for x in quality)] filter += [i for i in result if i['SubLanguageID'] == lang] try: lang = xbmc.convertLanguage(filter[0]['SubLanguageID'], xbmc.ISO_639_1) except: lang = filter[0]['SubLanguageID'] content = [filter[0]['IDSubtitleFile'],] content = server.DownloadSubtitles(token, content) content = base64.b64decode(content['data'][0]['data']) content = gzip.GzipFile(fileobj=StringIO.StringIO(content)).read() subtitle = xbmc.translatePath('special://temp/') subtitle = os.path.join(subtitle, 'TemporarySubs.%s.srt' % lang) codepage = codePageDict.get(lang, '') if codepage and control.setting('subtitles.utf') == 'true': try: content_encoded = codecs.decode(content, codepage) content = codecs.encode(content_encoded, 'utf-8') except: pass file = control.openFile(subtitle, 'w') file.write(str(content)) file.close() xbmc.sleep(1000) xbmc.Player().setSubtitles(subtitle) except: pass
def onPlayBackEnded(self): self.libForPlayback() self.onPlayBackStopped() if control.setting('crefresh') == 'true': xbmc.executebuiltin('Container.Refresh')
def timeoutsyncTVShows(): timeout = cache.timeout(syncTVShows, control.setting('trakt.user').strip()) return timeout
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. ''' import re, os, sys, urllib, urllib2, urlparse, time, threading from ptw.libraries import control from ptw.libraries import cache import pyxbmct.addonwindow as pyxbmct downloadPath = control.setting('downloadPath') property = control.addonInfo('id') + '.downloader' def downloader(): thumb = control.addonThumb() fanart = control.addonFanart() status = control.window.getProperty(property + '.status') if not downloadPath == '': item = control.item('[COLOR FF00b8ff]Downloads[/COLOR]', iconImage=thumb, thumbnailImage=thumb) item.addContextMenuItems([], replaceItems=True)
def download(name, image, url): if url == None: return from ptw.libraries import control try: headers = dict(urlparse.parse_qsl(url.rsplit('|', 1)[1])) except: headers = dict('') url = url.split('|')[0] content = re.compile('(.+?)\sS(\d*)E\d*$').findall(name) transname = name.translate(None, '\/:*?"<>|').strip('.') levels = ['../../../..', '../../..', '../..', '..'] if len(content) == 0: dest = control.setting('movie.download.path') dest = control.transPath(dest) for level in levels: try: control.makeFile(os.path.abspath(os.path.join(dest, level))) except: pass control.makeFile(dest) dest = os.path.join(dest, transname) control.makeFile(dest) else: dest = control.setting('tv.download.path') dest = control.transPath(dest) for level in levels: try: control.makeFile(os.path.abspath(os.path.join(dest, level))) except: pass control.makeFile(dest) transtvshowtitle = content[0][0].translate(None, '\/:*?"<>|').strip('.') dest = os.path.join(dest, transtvshowtitle) control.makeFile(dest) dest = os.path.join(dest, 'Season %01d' % int(content[0][1])) control.makeFile(dest) ext = os.path.splitext(urlparse.urlparse(url).path)[1][1:] if not ext in ['mp4', 'mkv', 'flv', 'avi', 'mpg']: ext = 'mp4' dest = os.path.join(dest, transname + '.' + ext) sysheaders = urllib.quote_plus(json.dumps(headers)) sysurl = urllib.quote_plus(url) systitle = urllib.quote_plus(name) sysimage = urllib.quote_plus(image) sysdest = urllib.quote_plus(dest) script = inspect.getfile(inspect.currentframe()) cmd = 'RunScript(%s, %s, %s, %s, %s, %s)' % ( script, sysurl, sysdest, systitle, sysimage, sysheaders) xbmc.executebuiltin(cmd)
def cachesyncTVShows(timeout=0): indicators = cache.get(syncTVShows, timeout, control.setting('trakt.user').strip()) return indicators
def service(self): try: lib_tools.create_folder( os.path.join( control.transPath(control.setting('library.movie')), '')) lib_tools.create_folder( os.path.join(control.transPath(control.setting('library.tv')), '')) except: pass try: control.makeFile(control.dataPath) dbcon = database.connect(control.libcacheFile) dbcur = dbcon.cursor() dbcur.execute("CREATE TABLE IF NOT EXISTS service (" "setting TEXT, " "value TEXT, " "UNIQUE(setting)" ");") dbcur.execute("SELECT * FROM service WHERE setting = 'last_run'") fetch = dbcur.fetchone() if fetch == None: serviceProperty = "1970-01-01 23:59:00.000000" dbcur.execute("INSERT INTO service Values (?, ?)", ('last_run', serviceProperty)) dbcon.commit() else: serviceProperty = str(fetch[1]) dbcon.close() except: try: return dbcon.close() except: return try: control.window.setProperty(self.property, serviceProperty) except: return while not xbmc.abortRequested: try: serviceProperty = control.window.getProperty(self.property) t1 = datetime.timedelta(hours=6) t2 = datetime.datetime.strptime(serviceProperty, '%Y-%m-%d %H:%M:%S.%f') t3 = datetime.datetime.now() check = abs(t3 - t2) > t1 if check == False: raise Exception() if (control.player.isPlaying() or control.condVisibility('Library.IsScanningVideo')): raise Exception() serviceProperty = datetime.datetime.now().strftime( '%Y-%m-%d %H:%M:%S.%f') control.window.setProperty(self.property, serviceProperty) try: dbcon = database.connect(control.libcacheFile) dbcur = dbcon.cursor() dbcur.execute("CREATE TABLE IF NOT EXISTS service (" "setting TEXT, " "value TEXT, " "UNIQUE(setting)" ");") dbcur.execute( "DELETE FROM service WHERE setting = 'last_run'") dbcur.execute("INSERT INTO service Values (?, ?)", ('last_run', serviceProperty)) dbcon.commit() dbcon.close() except: try: dbcon.close() except: pass if not control.setting('library.service.update') == 'true': raise Exception() info = control.setting( 'library.service.notification') or 'true' self.update(info=info) except: pass control.sleep(10000)
def get(name, imdb, season, episode): try: langs = [] try: try: langs = langDict[control.setting('sublang1')].split(',') except: langs.append(langDict[control.setting('sublang1')]) except: pass try: try: langs = langs + langDict[control.setting('sublang2')].split(',') except: langs.append(langDict[control.setting('sublang2')]) except: pass try: subLang = xbmc.Player().getSubtitles() except: subLang = '' if subLang == langs[0]: raise Exception() control.log('SUBS XXXXXX:%s' % name) server = xmlrpclib.Server('http://api.opensubtitles.org/xml-rpc', verbose=0) data = server.LogIn( control.setting('OSuser').strip(), control.setting('OSpass').strip(), 'en', subsversion) token = data['token'] if data['status'] !='200 OK': control.log("SUBS: Token %s, Status: %s" % (data['status'], data)) control.infoDialog('Open Subtitles Error: ' + str(data['status']), "Open Subtitles ERROR", time=6000) #control.dialog.ok(control.addonInfo('name'), str('Open Subtitles error[CR]Check login and password in settings[CR][CR]Error: %s'% data['status']), '') sublanguageid = ','.join(langs) ; imdbid = re.sub('[^0-9]', '', imdb) if not (season == '' or episode == ''): result = server.SearchSubtitles(token, [{'sublanguageid': sublanguageid, 'imdbid': imdbid, 'season': season, 'episode': episode}])['data'] fmt = ['hdtv'] else: result = server.SearchSubtitles(token, [{'sublanguageid': sublanguageid, 'imdbid': imdbid}])['data'] try: vidPath = xbmc.Player().getPlayingFile() except: vidPath = '' fmt = re.split('\.|\(|\)|\[|\]|\s|\-', vidPath) fmt = [i.lower() for i in fmt] fmt = [i for i in fmt if i in quality] filter = [] result = [i for i in result if i['SubSumCD'] == '1'] for lang in langs: filter += [i for i in result if i['SubLanguageID'] == lang and any(x in i['MovieReleaseName'].lower() for x in fmt)] filter += [i for i in result if i['SubLanguageID'] == lang and any(x in i['MovieReleaseName'].lower() for x in quality)] filter += [i for i in result if i['SubLanguageID'] == lang] try: lang = xbmc.convertLanguage(filter[0]['SubLanguageID'], xbmc.ISO_639_1) except: lang = filter[0]['SubLanguageID'] content = [filter[0]['IDSubtitleFile'],] content = server.DownloadSubtitles(token, content) content = base64.b64decode(content['data'][0]['data']) content = str(zlib.decompressobj(16+zlib.MAX_WBITS).decompress(content)) subtitle = xbmc.translatePath('special://temp/') subtitle = os.path.join(subtitle, 'TemporarySubs.%s.srt' % lang) codepage = codePageDict.get(lang, '') if codepage and control.setting('autoconvert_utf8') == 'true': try: content_encoded = codecs.decode(content, codepage) content = codecs.encode(content_encoded, 'utf-8') except: pass file = control.openFile(subtitle, 'w') file.write(str(content)) file.close() xbmc.sleep(1000) xbmc.Player().setSubtitles(subtitle) except Exception as e: control.log('SUBS: Error %s' %e) pass