def __init_instance(): with SubtitleProviderPool._lock: providers = enabled_service_list() provider_configs = { "addic7ed": { "username": settings.ADDIC7ED_USER, "password": settings.ADDIC7ED_PASS }, "itasa": { "username": settings.ITASA_USER, "password": settings.ITASA_PASS }, "legendastv": { "username": settings.LEGENDASTV_USER, "password": settings.LEGENDASTV_PASS }, "opensubtitles": { "username": settings.OPENSUBTITLES_USER, "password": settings.OPENSUBTITLES_PASS }, "subscenter": { "username": settings.SUBSCENTER_USER, "password": settings.SUBSCENTER_PASS }, } SubtitleProviderPool._instance = subliminal.ProviderPool( providers=providers, provider_configs=provider_configs)
def __init_instance(): with SubtitleProviderPool._lock: providers = enabled_service_list() provider_configs = { 'addic7ed': { 'username': settings.ADDIC7ED_USER, 'password': settings.ADDIC7ED_PASS }, 'itasa': { 'username': settings.ITASA_USER, 'password': settings.ITASA_PASS }, 'legendastv': { 'username': settings.LEGENDASTV_USER, 'password': settings.LEGENDASTV_PASS }, 'opensubtitles': { 'username': settings.OPENSUBTITLES_USER, 'password': settings.OPENSUBTITLES_PASS }, 'subscenter': { 'username': settings.SUBSCENTER_USER, 'password': settings.SUBSCENTER_PASS } } SubtitleProviderPool._instance = subliminal.ProviderPool( providers=providers, provider_configs=provider_configs)
def download_subtitles(self, show_id, season, episode, session=None): show_object = find_show(show_id, session=session) episode_object = show_object.get_episode(season, episode) existing_subtitles = episode_object.subtitles if not isinstance(existing_subtitles, list): existing_subtitles = [] # First of all, check if we need subtitles languages = self.get_needed_languages(existing_subtitles) if not languages: sickrage.app.log.debug('%s: No missing subtitles for S%02dE%02d' % (show_id, season, episode)) return existing_subtitles, None subtitles_path = self.get_subtitles_path(episode_object.location) video_path = episode_object.location providers = self.getEnabledServiceList() video = self.get_video(video_path, subtitles_path=subtitles_path, episode_object=episode_object) if not video: sickrage.app.log.debug( '%s: Exception caught in subliminal.scan_video for S%02dE%02d' % (show_id, season, episode)) return existing_subtitles, None provider_configs = { 'addic7ed': { 'username': sickrage.app.config.addic7ed_user, 'password': sickrage.app.config.addic7ed_pass }, 'itasa': { 'username': sickrage.app.config.itasa_user, 'password': sickrage.app.config.itasa_pass }, 'legendastv': { 'username': sickrage.app.config.legendastv_user, 'password': sickrage.app.config.legendastv_pass }, 'opensubtitles': { 'username': sickrage.app.config.opensubtitles_user, 'password': sickrage.app.config.opensubtitles_pass } } pool = subliminal.ProviderPool(providers=providers, provider_configs=provider_configs) try: subtitles_list = pool.list_subtitles(video, languages) if not subtitles_list: sickrage.app.log.debug( '%s: No subtitles found for S%02dE%02d on any provider' % (show_id, season, episode)) return existing_subtitles, None found_subtitles = pool.download_best_subtitles( subtitles_list, video, languages=languages, hearing_impaired=sickrage.app.config. subtitles_hearing_impaired, only_one=not sickrage.app.config.subtitles_multi) save_subtitles(video, found_subtitles, directory=subtitles_path, single=not sickrage.app.config.subtitles_multi) if not sickrage.app.config.embedded_subtitles_all and sickrage.app.config.subtitles_extra_scripts and video_path.endswith( ('.mkv', '.mp4')): self.run_subs_extra_scripts( episode_object, found_subtitles, video, single=not sickrage.app.config.subtitles_multi) new_subtitles = sorted({ subtitle.language.opensubtitles for subtitle in found_subtitles }) current_subtitles = sorted({ subtitle for subtitle in new_subtitles + existing_subtitles if subtitle }) if not sickrage.app.config.subtitles_multi and len( found_subtitles) == 1: new_code = found_subtitles[0].language.opensubtitles if new_code not in existing_subtitles: current_subtitles.remove(new_code) current_subtitles.append('und') except Exception as e: sickrage.app.log.error( "Error occurred when downloading subtitles for {}: {}".format( video_path, e)) return existing_subtitles, None if sickrage.app.config.subtitles_history: for subtitle in found_subtitles: sickrage.app.log.debug( 'history.logSubtitle %s, %s' % (subtitle.provider_name, subtitle.language.opensubtitles)) History.log_subtitle(show_id, season, episode, episode_object.status, subtitle) return current_subtitles, new_subtitles
def download_subtitles(episode): existing_subtitles = episode.subtitles # First of all, check if we need subtitles languages = get_needed_languages(existing_subtitles) if not languages: sickrage.srCore.srLogger.debug('%s: No missing subtitles for S%02dE%02d' % ( episode.show.indexerid, episode.season, episode.episode)) return existing_subtitles, None subtitles_path = get_subtitles_path(episode.location) video_path = episode.location providers = getEnabledServiceList() video = get_video(video_path, subtitles_path=subtitles_path, episode=episode) if not video: sickrage.srCore.srLogger.debug('%s: Exception caught in subliminal.scan_video for S%02dE%02d' % (episode.show.indexerid, episode.season, episode.episode)) return existing_subtitles, None provider_configs = { 'addic7ed': {'username': sickrage.srCore.srConfig.ADDIC7ED_USER, 'password': sickrage.srCore.srConfig.ADDIC7ED_PASS}, 'itasa': {'username': sickrage.srCore.srConfig.ITASA_USER, 'password': sickrage.srCore.srConfig.ITASA_PASS}, 'legendastv': {'username': sickrage.srCore.srConfig.LEGENDASTV_USER, 'password': sickrage.srCore.srConfig.LEGENDASTV_PASS}, 'opensubtitles': {'username': sickrage.srCore.srConfig.OPENSUBTITLES_USER, 'password': sickrage.srCore.srConfig.OPENSUBTITLES_PASS}} pool = subliminal.ProviderPool(providers=providers, provider_configs=provider_configs) try: subtitles_list = pool.list_subtitles(video, languages) if not subtitles_list: sickrage.srCore.srLogger.debug('%s: No subtitles found for S%02dE%02d on any provider' % ( episode.show.indexerid, episode.season, episode.episode)) return existing_subtitles, None found_subtitles = pool.download_best_subtitles(subtitles_list, video, languages=languages, hearing_impaired=sickrage.srCore.srConfig.SUBTITLES_HEARING_IMPAIRED, only_one=not sickrage.srCore.srConfig.SUBTITLES_MULTI) save_subtitles(video, found_subtitles, directory=subtitles_path, single=not sickrage.srCore.srConfig.SUBTITLES_MULTI) if not sickrage.srCore.srConfig.EMBEDDED_SUBTITLES_ALL and sickrage.srCore.srConfig.SUBTITLES_EXTRA_SCRIPTS and video_path.endswith( ('.mkv', '.mp4')): run_subs_extra_scripts(episode, found_subtitles, video, single=not sickrage.srCore.srConfig.SUBTITLES_MULTI) new_subtitles = sorted({subtitle.language.opensubtitles for subtitle in found_subtitles}) current_subtitles = sorted({subtitle for subtitle in new_subtitles + existing_subtitles if subtitle}) if not sickrage.srCore.srConfig.SUBTITLES_MULTI and len(found_subtitles) == 1: new_code = found_subtitles[0].language.opensubtitles if new_code not in existing_subtitles: current_subtitles.remove(new_code) current_subtitles.append('und') except Exception: sickrage.srCore.srLogger.info("Error occurred when downloading subtitles for: %s" % video_path) sickrage.srCore.srLogger.error(traceback.format_exc()) return existing_subtitles, None if sickrage.srCore.srConfig.SUBTITLES_HISTORY: from sickrage.core.tv.show.history import History for subtitle in found_subtitles: sickrage.srCore.srLogger.debug( 'history.logSubtitle %s, %s' % (subtitle.provider_name, subtitle.language.opensubtitles)) History.logSubtitle(episode.show.indexerid, episode.season, episode.episode, episode.status, subtitle) return current_subtitles, new_subtitles
def downloadSubtitles(subtitles_info): existing_subtitles = subtitles_info['subtitles'] # First of all, check if we need subtitles languages = getNeededLanguages(existing_subtitles) if not languages: sickrage.srCore.srLogger.debug( '%s: No missing subtitles for S%02dE%02d' % (subtitles_info['show.indexerid'], subtitles_info['season'], subtitles_info['episode'])) return existing_subtitles, None subtitles_path = getSubtitlesPath(subtitles_info['location']).encode( sickrage.SYS_ENCODING) video_path = subtitles_info['location'].encode(sickrage.SYS_ENCODING) providers = getEnabledServiceList() try: video = subliminal.scan_video(video_path) except Exception: sickrage.srCore.srLogger.debug( '%s: Exception caught in subliminal.scan_video for S%02dE%02d' % (subtitles_info['show.indexerid'], subtitles_info['season'], subtitles_info['episode'])) return existing_subtitles, None provider_configs = { 'addic7ed': { 'username': sickrage.srCore.srConfig.ADDIC7ED_USER, 'password': sickrage.srCore.srConfig.ADDIC7ED_PASS }, 'itasa': { 'username': sickrage.srCore.srConfig.ITASA_USER, 'password': sickrage.srCore.srConfig.ITASA_PASS }, 'legendastv': { 'username': sickrage.srCore.srConfig.LEGENDASTV_USER, 'password': sickrage.srCore.srConfig.LEGENDASTV_PASS }, 'opensubtitles': { 'username': sickrage.srCore.srConfig.OPENSUBTITLES_USER, 'password': sickrage.srCore.srConfig.OPENSUBTITLES_PASS } } pool = subliminal.ProviderPool(providers=providers, provider_configs=provider_configs) try: subtitles_list = pool.list_subtitles(video, languages) if not subtitles_list: sickrage.srCore.srLogger.debug( '%s: No subtitles found for S%02dE%02d on any provider' % (subtitles_info['show.indexerid'], subtitles_info['season'], subtitles_info['episode'])) return existing_subtitles, None found_subtitles = pool.download_best_subtitles( subtitles_list, video, languages=languages, hearing_impaired=sickrage.srCore.srConfig. SUBTITLES_HEARING_IMPAIRED, only_one=not sickrage.srCore.srConfig.SUBTITLES_MULTI) save_subtitles(video, found_subtitles, directory=subtitles_path, single=not sickrage.srCore.srConfig.SUBTITLES_MULTI) if not sickrage.srCore.srConfig.EMBEDDED_SUBTITLES_ALL and sickrage.srCore.srConfig.SUBTITLES_EXTRA_SCRIPTS and video_path.endswith( ('.mkv', '.mp4')): run_subs_extra_scripts( subtitles_info, found_subtitles, video, single=not sickrage.srCore.srConfig.SUBTITLES_MULTI) current_subtitles = subtitlesLanguages(video_path)[0] new_subtitles = frozenset(current_subtitles).difference( existing_subtitles) except Exception: sickrage.srCore.srLogger.info( "Error occurred when downloading subtitles for: %s" % video_path) sickrage.srCore.srLogger.error(traceback.format_exc()) return existing_subtitles, None if sickrage.srCore.srConfig.SUBTITLES_HISTORY: from sickrage.core.tv.show.history import History for subtitle in found_subtitles: sickrage.srCore.srLogger.debug( 'history.logSubtitle %s, %s' % (subtitle.provider_name, subtitle.language.opensubtitles)) History.logSubtitle(subtitles_info['show.indexerid'], subtitles_info['season'], subtitles_info['episode'], subtitles_info['status'], subtitle) return current_subtitles, new_subtitles