Esempio n. 1
0
    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)
Esempio n. 2
0
    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)
Esempio n. 3
0
    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
Esempio n. 4
0
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
Esempio n. 5
0
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