def downloadSubtitles(subtitles_info): existing_subtitles = subtitles_info[b'subtitles'] # First of all, check if we need subtitles languages = getNeededLanguages(existing_subtitles) if not languages: sickrage.LOGGER.debug('%s: No missing subtitles for S%02dE%02d' % ( subtitles_info[b'show.indexerid'], subtitles_info[b'season'], subtitles_info[b'episode'])) return existing_subtitles, None subtitles_path = getSubtitlesPath(subtitles_info[b'location']).encode(sickrage.SYS_ENCODING) video_path = subtitles_info[b'location'].encode(sickrage.SYS_ENCODING) providers = getEnabledServiceList() try: video = subliminal.scan_video(video_path, subtitles=False, embedded_subtitles=False) except Exception: sickrage.LOGGER.debug('%s: Exception caught in subliminal.scan_video for S%02dE%02d' % (subtitles_info[b'show.indexerid'], subtitles_info[b'season'], subtitles_info[b'episode'])) return existing_subtitles, None provider_configs = {'addic7ed': {'username': sickrage.ADDIC7ED_USER, 'password': sickrage.ADDIC7ED_PASS}, 'legendastv': {'username': sickrage.LEGENDASTV_USER, 'password': sickrage.LEGENDASTV_PASS}, 'opensubtitles': {'username': sickrage.OPENSUBTITLES_USER, 'password': sickrage.OPENSUBTITLES_PASS}} pool = subliminal.api.ProviderPool(providers=providers, provider_configs=provider_configs) try: subtitles_list = pool.list_subtitles(video, languages) if not subtitles_list: sickrage.LOGGER.debug('%s: No subtitles found for S%02dE%02d on any provider' % ( subtitles_info[b'show.indexerid'], subtitles_info[b'season'], subtitles_info[b'episode'])) return existing_subtitles, None found_subtitles = pool.download_best_subtitles(subtitles_list, video, languages=languages, hearing_impaired=sickrage.SUBTITLES_HEARING_IMPAIRED, only_one=not sickrage.SUBTITLES_MULTI) save_subtitles(video, found_subtitles, directory=subtitles_path, single=not sickrage.SUBTITLES_MULTI) if not sickrage.EMBEDDED_SUBTITLES_ALL and sickrage.SUBTITLES_EXTRA_SCRIPTS and video_path.endswith( ('.mkv', '.mp4')): run_subs_extra_scripts(subtitles_info, found_subtitles, video, single=not sickrage.SUBTITLES_MULTI) current_subtitles = subtitlesLanguages(video_path)[0] new_subtitles = frozenset(current_subtitles).difference(existing_subtitles) except Exception: sickrage.LOGGER.info("Error occurred when downloading subtitles for: %s" % video_path) sickrage.LOGGER.error(traceback.format_exc()) return existing_subtitles, None if sickrage.SUBTITLES_HISTORY: for subtitle in found_subtitles: sickrage.LOGGER.debug('history.logSubtitle %s, %s' % (subtitle.provider_name, subtitle.language.opensubtitles)) History.logSubtitle(subtitles_info[b'show.indexerid'], subtitles_info[b'season'], subtitles_info[b'episode'], subtitles_info[b'status'], subtitle) return current_subtitles, new_subtitles
def download_subtitles(episode): existing_subtitles = episode.subtitles if not isinstance(existing_subtitles, list): existing_subtitles = [] # First of all, check if we need subtitles languages = get_needed_languages(existing_subtitles) if not languages: sickrage.app.log.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.app.log.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.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' % (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.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')): run_subs_extra_scripts( episode, 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: from sickrage.core.tv.show.history import History for subtitle in found_subtitles: sickrage.app.log.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 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