示例#1
0
    def _retrieve_show_image(self, image_type, show_obj, which=0):
        """
        Gets an image URL from theTVDB.com and fanart.tv, downloads it and returns the data.

        image_type: type of image to retrieve (currently supported: fanart, poster, banner)
        show_obj: a TVShow object to use when searching for the image
        which: optional, a specific numbered poster to look for

        Returns: the binary image data if available, or else None
        """

        image_data = None
        indexer_lang = show_obj.lang or sickrage.app.config.indexer_default_language

        try:
            # There's gotta be a better way of doing this but we don't wanna
            # change the language value elsewhere
            lINDEXER_API_PARMS = IndexerApi(show_obj.indexer).api_params.copy()

            lINDEXER_API_PARMS['language'] = indexer_lang

            if show_obj.dvdorder != 0:
                lINDEXER_API_PARMS['dvdorder'] = True

            t = IndexerApi(show_obj.indexer).indexer(**lINDEXER_API_PARMS)

        except (indexer_error, IOError) as e:
            sickrage.app.log.warning("{}: Unable to look up show on ".format(show_obj.indexerid) + IndexerApi(
                show_obj.indexer).name + ", not downloading images: {}".format(e))
            sickrage.app.log.debug("Indexer " + IndexerApi(
                show_obj.indexer).name + " maybe experiencing some problems. Try again later")
            return None

        if image_type not in ('fanart', 'poster', 'series', 'poster_thumb', 'series_thumb'):
            sickrage.app.log.warning(
                "Invalid image type " + str(image_type) + ", couldn't find it in the " + IndexerApi(
                    show_obj.indexer).name + " object")
            return

        if image_type == 'poster_thumb':
            try:
                image_url = t.images(show_obj.indexerid, key_type='poster')[which]['thumbnail']
            except (KeyError, IndexError):
                image_url = self._retrieve_show_images_from_fanart(show_obj, image_type, True)
        elif image_type == 'series_thumb':
            try:
                image_url = t.images(show_obj.indexerid, key_type='series')[which]['thumbnail']
            except (KeyError, IndexError):
                image_url = self._retrieve_show_images_from_fanart(show_obj, image_type, True)
        else:
            try:
                image_url = t.images(show_obj.indexerid, key_type=image_type)[which]['filename']
            except (KeyError, IndexError):
                image_url = self._retrieve_show_images_from_fanart(show_obj, image_type)

        if image_url:
            image_data = getShowImage(image_url)

        return image_data
示例#2
0
    def _retrieve_season_banner_image(show_obj, season, which=0):
        """
        Should return a dict like:

        result = {<season number>:
                    {1: '<url 1>', 2: <url 2>, ...},}
        """

        indexer_lang = show_obj.lang or sickrage.app.config.indexer_default_language

        try:
            # There's gotta be a better way of doing this but we don't wanna
            # change the language value elsewhere
            lINDEXER_API_PARMS = IndexerApi(show_obj.indexer).api_params.copy()

            lINDEXER_API_PARMS['language'] = indexer_lang

            t = IndexerApi(show_obj.indexer).indexer(**lINDEXER_API_PARMS)

            # Give us just the normal season graphics
            return t.images(show_obj.indexerid, key_type='seasonwide', season=season)[which]['filename']
        except (indexer_error, IOError) as e:
            sickrage.app.log.warning("{}: Unable to look up show on ".format(show_obj.indexerid) + IndexerApi(
                show_obj.indexer).name + ", not downloading images: {}".format(e))
            sickrage.app.log.debug("Indexer " + IndexerApi(
                show_obj.indexer).name + " maybe experiencing some problems. Try again later")
        except (KeyError, IndexError):
            pass
示例#3
0
    def _retrieve_season_banner_image(show_obj, season, which=0):
        """
        Should return a dict like:

        result = {<season number>:
                    {1: '<url 1>', 2: <url 2>, ...},}
        """

        indexer_lang = show_obj.lang or sickrage.app.config.indexer_default_language

        try:
            # There's gotta be a better way of doing this but we don't wanna
            # change the language value elsewhere
            lINDEXER_API_PARMS = IndexerApi(show_obj.indexer).api_params.copy()

            lINDEXER_API_PARMS['language'] = indexer_lang

            t = IndexerApi(show_obj.indexer).indexer(**lINDEXER_API_PARMS)

            # Give us just the normal season graphics
            image_data = t.images(show_obj.indexer_id, key_type='seasonwide', season=season)
            if image_data:
                return image_data[which]['filename']

            sickrage.app.log.debug(
                "{}: No season {} banner images on {} to download found".format(show_obj.indexer_id, season, IndexerApi(show_obj.indexer).name))
        except (KeyError, IndexError):
            pass
示例#4
0
def indexerImage(id=None, which=None):
    media_format = ('normal', 'thumb')[which in ('banner_thumb',
                                                 'poster_thumb', 'small')]
    image_type = which[0:6]

    if image_type not in ('fanart', 'poster', 'banner'):
        sickrage.app.log.error("Invalid image type " + str(image_type) +
                               ", couldn't find it in the " +
                               IndexerApi(INDEXER_TVDB).name + " object")
        return

    try:
        lINDEXER_API_PARMS = IndexerApi(INDEXER_TVDB).api_params.copy()
        t = IndexerApi(INDEXER_TVDB).indexer(**lINDEXER_API_PARMS)

        image_name = str(id) + '.' + image_type + '.jpg'

        try:
            if media_format == "thumb":
                image_path = os.path.join(ImageCache()._thumbnails_dir(),
                                          image_name)
                if not os.path.exists(image_path):
                    image_url = t.images(int(id),
                                         key_type=image_type)[0]['thumbnail']
                    sickrage.app.wsession.download(image_url, image_path)
            else:
                image_path = os.path.join(ImageCache()._cache_dir(),
                                          image_name)
                if not os.path.exists(image_path):
                    image_url = t.images(int(id),
                                         key_type=image_type)[0]['filename']
                    sickrage.app.wsession.download(image_url, image_path)
        except (KeyError, IndexError):
            return

        if image_type == 'banner':
            return Banner(int(id), media_format).url
        elif image_type == 'fanart':
            return FanArt(int(id), media_format).url
        elif image_type == 'poster':
            return Poster(int(id), media_format).url
    except (indexer_error, IOError) as e:
        sickrage.app.log.warning(
            "{}: Unable to look up show on ".format(id) +
            IndexerApi(INDEXER_TVDB).name +
            ", not downloading images: {}".format(e.message))
示例#5
0
def indexerImage(id=None, which=None):
    media_format = ('normal', 'thumb')[which in ('banner_thumb',
                                                 'poster_thumb', 'small')]
    image_type = which[0:6]

    if image_type not in ('fanart', 'poster', 'banner'):
        sickrage.app.log.error("Invalid image type " + str(image_type) +
                               ", couldn't find it in the " +
                               IndexerApi(INDEXER_TVDB).name + " object")
        return

    try:
        lINDEXER_API_PARMS = IndexerApi(INDEXER_TVDB).api_params.copy()
        t = IndexerApi(INDEXER_TVDB).indexer(**lINDEXER_API_PARMS)

        image_name = str(id) + '.' + image_type + '.jpg'

        if media_format == "thumb":
            image_path = os.path.join(ImageCache()._thumbnails_dir(),
                                      image_name)
            if not os.path.exists(image_path):
                image_data = t.images(int(id), key_type=image_type)
                if image_data:
                    image_url = image_data[0]['thumbnail']
                    WebSession().download(image_url, image_path)
        else:
            image_path = os.path.join(ImageCache()._cache_dir(), image_name)
            if not os.path.exists(image_path):
                image_data = t.images(int(id), key_type=image_type)
                if image_data:
                    image_url = image_data[0]['filename']
                    WebSession().download(image_url, image_path)
    except (KeyError, IndexError):
        pass

    if image_type == 'banner':
        return Banner(int(id), media_format)
    elif image_type == 'fanart':
        return FanArt(int(id), media_format)
    elif image_type == 'poster':
        return Poster(int(id), media_format)
示例#6
0
文件: util.py 项目: gborri/SiCKRAGE
def indexerImage(id=None, which=None):
    media_format = ('normal', 'thumb')[which in ('banner_thumb', 'poster_thumb', 'small')]
    image_type = which[0:6]

    if image_type not in ('fanart', 'poster', 'banner'):
        sickrage.app.log.error(
            "Invalid image type " + str(image_type) + ", couldn't find it in the " + IndexerApi(
                INDEXER_TVDB).name + " object")
        return

    try:
        lINDEXER_API_PARMS = IndexerApi(INDEXER_TVDB).api_params.copy()
        t = IndexerApi(INDEXER_TVDB).indexer(**lINDEXER_API_PARMS)

        image_name = str(id) + '.' + image_type + '.jpg'

        try:
            if media_format == "thumb":
                image_path = os.path.join(ImageCache()._thumbnails_dir(), image_name)
                if not os.path.exists(image_path):
                    image_url = t.images(int(id), key_type=image_type)[0]['thumbnail']
                    sickrage.app.wsession.download(image_url, image_path)
            else:
                image_path = os.path.join(ImageCache()._cache_dir(), image_name)
                if not os.path.exists(image_path):
                    image_url = t.images(int(id), key_type=image_type)[0]['filename']
                    sickrage.app.wsession.download(image_url, image_path)
        except (KeyError, IndexError):
            return

        if image_type == 'banner':
            return Banner(int(id), media_format).url
        elif image_type == 'fanart':
            return FanArt(int(id), media_format).url
        elif image_type == 'poster':
            return Poster(int(id), media_format).url
    except (indexer_error, IOError) as e:
        sickrage.app.log.warning("{}: Unable to look up show on ".format(id) + IndexerApi(
            INDEXER_TVDB).name + ", not downloading images: {}".format(e.message))
示例#7
0
    def _retrieve_show_image(self, image_type, show_obj, which=0):
        """
        Gets an image URL from theTVDB.com and fanart.tv, downloads it and returns the data.

        image_type: type of image to retrieve (currently supported: fanart, poster, banner)
        show_obj: a TVShow object to use when searching for the image
        which: optional, a specific numbered poster to look for

        Returns: the binary image data if available, or else None
        """

        image_data = None
        indexer_lang = show_obj.lang or sickrage.app.config.indexer_default_language

        if image_type not in ('fanart', 'poster', 'series', 'poster_thumb', 'series_thumb', 'fanart_thumb'):
            sickrage.app.log.warning("Invalid image type " + str(image_type) + ", couldn't find it in the " + IndexerApi(show_obj.indexer).name + " object")
            return

        # There's gotta be a better way of doing this but we don't wanna
        # change the language value elsewhere
        lINDEXER_API_PARMS = IndexerApi(show_obj.indexer).api_params.copy()

        lINDEXER_API_PARMS['language'] = indexer_lang

        if show_obj.dvdorder != 0:
            lINDEXER_API_PARMS['dvdorder'] = True

        t = IndexerApi(show_obj.indexer).indexer(**lINDEXER_API_PARMS)

        is_image_thumb = '_thumb' in image_type
        image_types = {
            '{}'.format(image_type): {
                'indexer': lambda: t.images(show_obj.indexer_id, key_type=image_type.replace('_thumb', ''))[which][('filename', 'thumbnail')[is_image_thumb]],
                'fanart': lambda: self._retrieve_show_images_from_fanart(show_obj, image_type.replace('_thumb', ''), is_image_thumb)
            }
        }

        for fname in ['indexer', 'fanart']:
            try:
                image_url = image_types[image_type][fname]()
                if image_url:
                    image_data = self.get_show_image(image_url)
                    if image_data:
                        break
            except (KeyError, IndexError, TypeError) as e:
                pass

        return image_data