def _cache_image_from_tvdb(self, show_obj, img_type): """ Retrieves an image of the type specified from TVDB and saves it to the cache folder returns: bool representing success show_obj: TVShow object that we want to cache an image for img_type: BANNER or POSTER """ # generate the path based on the type & tvdb_id if img_type == self.POSTER: img_type_name = 'poster' dest_path = self.poster_path(show_obj.tvdbid) elif img_type == self.BANNER: img_type_name = 'banner' dest_path = self.banner_path(show_obj.tvdbid) else: logger.log(u"Invalid cache image type: " + str(img_type), logger.ERROR) return False # retrieve the image from TVDB using the generic metadata class #TODO: refactor metadata_generator = GenericMetadata() img_data = metadata_generator._retrieve_show_image( img_type_name, show_obj) result = metadata_generator._write_image(img_data, dest_path) return result
def _cache_image_from_tvdb(self, show_obj, img_type): """ Retrieves an image of the type specified from TVDB and saves it to the cache folder returns: bool representing success show_obj: TVShow object that we want to cache an image for img_type: BANNER or POSTER """ # generate the path based on the type & tvdb_id if img_type == self.POSTER: img_type_name = 'poster' dest_path = self.poster_path(show_obj.tvdbid) elif img_type == self.BANNER: img_type_name = 'banner' dest_path = self.banner_path(show_obj.tvdbid) elif img_type == self.POSTER_THUMB: img_type_name = 'poster_thumb' dest_path = self.poster_thumb_path(show_obj.tvdbid) elif img_type == self.BANNER_THUMB: img_type_name = 'banner_thumb' dest_path = self.banner_thumb_path(show_obj.tvdbid) else: logger.log(u"Invalid cache image type: "+str(img_type), logger.ERROR) return False # retrieve the image from TVDB using the generic metadata class #TODO: refactor metadata_generator = GenericMetadata() img_data = metadata_generator._retrieve_show_image(img_type_name, show_obj) result = metadata_generator._write_image(img_data, dest_path) return result
def _cache_image_from_tvdb(self, show_obj, img_type): if img_type == self.POSTER: img_type_name = 'poster' dest_path = self.poster_path(show_obj.tvdbid) elif img_type == self.BANNER: img_type_name = 'banner' dest_path = self.banner_path(show_obj.tvdbid) else: logger.log(u"Invalid cache image type: "+str(img_type), logger.ERROR) return False #TODO: refactor metadata_generator = GenericMetadata() img_data = metadata_generator._retrieve_show_image(img_type_name, show_obj) result = metadata_generator._write_image(img_data, dest_path) return result
def _cache_image_from_tvdb(self, show_obj, img_type): if img_type == self.POSTER: img_type_name = 'poster' dest_path = self.poster_path(show_obj.tvdbid) elif img_type == self.BANNER: img_type_name = 'banner' dest_path = self.banner_path(show_obj.tvdbid) else: logger.log(u"Invalid cache image type: " + str(img_type), logger.ERROR) return False #TODO: refactor metadata_generator = GenericMetadata() img_data = metadata_generator._retrieve_show_image( img_type_name, show_obj) result = metadata_generator._write_image(img_data, dest_path) return result
def _cache_image_from_indexer(self, show_obj, img_type): """ Retrieves an image of the type specified from indexer and saves it to the cache folder :param show_obj: TVShow object that we want to cache an image for :param img_type: BANNER or POSTER or FANART :return: bool representing success """ # generate the path based on the type & indexer_id if img_type == self.POSTER: img_type_name = 'poster' dest_path = self.poster_path(show_obj.indexerid) elif img_type == self.BANNER: img_type_name = 'banner' dest_path = self.banner_path(show_obj.indexerid) elif img_type == self.POSTER_THUMB: img_type_name = 'poster_thumb' dest_path = self.poster_thumb_path(show_obj.indexerid) elif img_type == self.BANNER_THUMB: img_type_name = 'banner_thumb' dest_path = self.banner_thumb_path(show_obj.indexerid) elif img_type == self.FANART: img_type_name = 'fanart' dest_path = self.fanart_path(show_obj.indexerid) else: logger.log("Invalid cache image type: " + str(img_type), logger.ERROR) return False # retrieve the image from indexer using the generic metadata class # TODO: refactor metadata_generator = GenericMetadata() img_data = metadata_generator._retrieve_show_image( img_type_name, show_obj) result = metadata_generator._write_image(img_data, dest_path) return result
def _cache_image_from_indexer(self, show_obj, img_type): """ Retrieves an image of the type specified from indexer and saves it to the cache folder :param show_obj: TVShow object that we want to cache an image for :param img_type: BANNER or POSTER or FANART :return: bool representing success """ # generate the path based on the type & indexer_id if img_type == self.POSTER: img_type_name = "poster" dest_path = self.poster_path(show_obj.indexerid) elif img_type == self.BANNER: img_type_name = "banner" dest_path = self.banner_path(show_obj.indexerid) elif img_type == self.POSTER_THUMB: img_type_name = "poster_thumb" dest_path = self.poster_thumb_path(show_obj.indexerid) elif img_type == self.BANNER_THUMB: img_type_name = "banner_thumb" dest_path = self.banner_thumb_path(show_obj.indexerid) elif img_type == self.FANART: img_type_name = "fanart" dest_path = self.fanart_path(show_obj.indexerid) else: logger.log(u"Invalid cache image type: " + str(img_type), logger.ERROR) return False # retrieve the image from indexer using the generic metadata class # TODO: refactor metadata_generator = GenericMetadata() img_data = metadata_generator._retrieve_show_image(img_type_name, show_obj) result = metadata_generator._write_image(img_data, dest_path) return result
def _cache_image_from_indexer(self, show_obj, img_type, num_files=0, max_files=500): """ Retrieves an image of the type specified from indexer and saves it to the cache folder returns: bool representing success show_obj: TVShow object that we want to cache an image for img_type: BANNER, POSTER, or FANART """ # generate the path based on the type & indexer_id if img_type == self.POSTER: img_type_name = 'poster' dest_path = self.poster_path(show_obj.indexerid) elif img_type == self.BANNER: img_type_name = 'banner' dest_path = self.banner_path(show_obj.indexerid) elif img_type == self.FANART: img_type_name = 'fanart_all' dest_path = self.fanart_path(show_obj.indexerid).replace('fanart.jpg', '*') elif img_type == self.POSTER_THUMB: img_type_name = 'poster_thumb' dest_path = self.poster_thumb_path(show_obj.indexerid) elif img_type == self.BANNER_THUMB: img_type_name = 'banner_thumb' dest_path = self.banner_thumb_path(show_obj.indexerid) else: logger.log(u'Invalid cache image type: ' + str(img_type), logger.ERROR) return False # retrieve the image from indexer using the generic metadata class metadata_generator = GenericMetadata() if img_type == self.FANART: image_urls = metadata_generator.retrieve_show_image(img_type_name, show_obj) if None is image_urls: return False crcs = [] for cache_file_name in ek.ek(glob.glob, dest_path): with open(cache_file_name, mode='rb') as resource: crc = '%05X' % (zlib.crc32(resource.read()) & 0xFFFFFFFF) if crc not in crcs: crcs += [crc] success = 0 count_urls = len(image_urls) sources = [] for image_url in image_urls or []: img_data = helpers.getURL(image_url, nocache=True) if None is img_data: continue crc = '%05X' % (zlib.crc32(img_data) & 0xFFFFFFFF) if crc in crcs: count_urls -= 1 continue crcs += [crc] img_source = (((('', 'tvdb')['thetvdb.com' in image_url], 'tvrage')['tvrage.com' in image_url], 'fatv')['fanart.tv' in image_url], 'tmdb')['tmdb' in image_url] img_xtra = '' if 'tmdb' == img_source: match = re.search(r'(?:.*\?(\d+$))?', image_url, re.I | re.M) if match and None is not match.group(1): img_xtra = match.group(1) file_desc = '%s.%03d%s.%s' % ( show_obj.indexerid, num_files, ('.%s%s' % (img_source, img_xtra), '')['' == img_source], crc) cur_file_path = self.fanart_path(file_desc) result = metadata_generator.write_image(img_data, cur_file_path) if result and self.FANART != self.which_type(cur_file_path): try: ek.ek(os.remove, cur_file_path) except OSError as e: logger.log(u'Unable to remove %s: %s / %s' % (cur_file_path, repr(e), str(e)), logger.WARNING) continue if img_source: sources += [img_source] num_files += (0, 1)[result] success += (0, 1)[result] if num_files > max_files: break if count_urls: total = len(ek.ek(glob.glob, dest_path)) logger.log(u'Saved %s of %s fanart images%s. Cached %s of max %s fanart file%s' % (success, count_urls, ('', ' from ' + ', '.join([x for x in list(set(sources))]))[0 < len(sources)], total, sickbeard.FANART_LIMIT, helpers.maybe_plural(total))) return bool(count_urls) and not bool(count_urls - success) img_data = metadata_generator.retrieve_show_image(img_type_name, show_obj) if None is img_data: return False result = metadata_generator.write_image(img_data, dest_path) if result: logger.log(u'Saved image type %s' % img_type_name) return result
def _cache_image_from_indexer(self, show_obj, img_type, num_files=0, max_files=500): """ Retrieves an image of the type specified from indexer and saves it to the cache folder returns: bool representing success show_obj: TVShow object that we want to cache an image for img_type: BANNER, POSTER, or FANART """ # generate the path based on the type & indexer_id if img_type == self.POSTER: img_type_name = 'poster' dest_path = self.poster_path(show_obj.indexerid) elif img_type == self.BANNER: img_type_name = 'banner' dest_path = self.banner_path(show_obj.indexerid) elif img_type == self.FANART: img_type_name = 'fanart_all' dest_path = self.fanart_path(show_obj.indexerid).replace( 'fanart.jpg', '*') elif img_type == self.POSTER_THUMB: img_type_name = 'poster_thumb' dest_path = self.poster_thumb_path(show_obj.indexerid) elif img_type == self.BANNER_THUMB: img_type_name = 'banner_thumb' dest_path = self.banner_thumb_path(show_obj.indexerid) else: logger.log(u'Invalid cache image type: ' + str(img_type), logger.ERROR) return False # retrieve the image from indexer using the generic metadata class metadata_generator = GenericMetadata() if img_type == self.FANART: image_urls = metadata_generator.retrieve_show_image( img_type_name, show_obj) if None is image_urls: return False crcs = [] for cache_file_name in ek.ek(glob.glob, dest_path): with open(cache_file_name, mode='rb') as resource: crc = '%05X' % (zlib.crc32(resource.read()) & 0xFFFFFFFF) if crc not in crcs: crcs += [crc] success = 0 count_urls = len(image_urls) sources = [] for image_url in image_urls or []: img_data = helpers.getURL(image_url, nocache=True) if None is img_data: continue crc = '%05X' % (zlib.crc32(img_data) & 0xFFFFFFFF) if crc in crcs: count_urls -= 1 continue crcs += [crc] img_source = (((('', 'tvdb')['thetvdb.com' in image_url], 'tvrage')['tvrage.com' in image_url], 'fatv')['fanart.tv' in image_url], 'tmdb')['tmdb' in image_url] img_xtra = '' if 'tmdb' == img_source: match = re.search(r'(?:.*\?(\d+$))?', image_url, re.I | re.M) if match and None is not match.group(1): img_xtra = match.group(1) file_desc = '%s.%03d%s.%s' % (show_obj.indexerid, num_files, ('.%s%s' % (img_source, img_xtra), '')['' == img_source], crc) cur_file_path = self.fanart_path(file_desc) result = metadata_generator.write_image( img_data, cur_file_path) if result and self.FANART != self.which_type(cur_file_path): try: ek.ek(os.remove, cur_file_path) except OSError as e: logger.log( u'Unable to remove %s: %s / %s' % (cur_file_path, repr(e), str(e)), logger.WARNING) continue if img_source: sources += [img_source] num_files += (0, 1)[result] success += (0, 1)[result] if num_files > max_files: break if count_urls: total = len(ek.ek(glob.glob, dest_path)) logger.log( u'Saved %s of %s fanart images%s. Cached %s of max %s fanart file%s' % (success, count_urls, ('', ' from ' + ', '.join([x for x in list(set(sources)) ]))[0 < len(sources)], total, sickbeard.FANART_LIMIT, helpers.maybe_plural(total))) return bool(count_urls) and not bool(count_urls - success) img_data = metadata_generator.retrieve_show_image( img_type_name, show_obj) if None is img_data: return False result = metadata_generator.write_image(img_data, dest_path) if result: logger.log(u'Saved image type %s' % img_type_name) return result