def get_infoproperties(self, item): infoproperties = {} infoproperties['watchedepisodes'] = item.get('watchedepisodes') infoproperties['metacritic_rating'] = '{0:.1f}'.format( utils.try_parse_float( item.get('ratings', {}).get('metacritic', {}).get('rating'))) infoproperties['imdb_rating'] = '{0:.1f}'.format( utils.try_parse_float( item.get('ratings', {}).get('imdb', {}).get('rating'))) infoproperties['imdb_votes'] = '{:0,.0f}'.format( utils.try_parse_float( item.get('ratings', {}).get('imdb', {}).get('votes'))) infoproperties['tmdb_rating'] = '{0:.1f}'.format( utils.try_parse_float( item.get('ratings', {}).get('themoviedb', {}).get('rating'))) infoproperties['tmdb_votes'] = '{:0,.0f}'.format( utils.try_parse_float( item.get('ratings', {}).get('themoviedb', {}).get('votes'))) infoproperties['set.numitems'] = item.get('limits', {}).get('total') or '' movies_set = item.get('movies') or None if movies_set: years = [] for m in movies_set: year = utils.try_parse_int(m.get('year')) years.append(year) yearl = min(years) yearh = max(years) infoproperties['set.years'] = '{0} - {1}'.format(yearl, yearh) infoproperties = utils.del_empty_keys(infoproperties, ['N/A', '0.0', '0']) return infoproperties
def get_color_lumsat(self, r, g, b): hls_tuple = colorsys.rgb_to_hls(r / 255.0, g / 255.0, b / 255.0) hue = hls_tuple[0] lum = utils.try_parse_float( xbmc.getInfoLabel( 'Skin.String(TMDbHelper.Colors.Luminance)')) or hls_tuple[1] sat = utils.try_parse_float( xbmc.getInfoLabel( 'Skin.String(TMDbHelper.Colors.Saturation)')) or hls_tuple[2] return self.rgb_to_int(*colorsys.hls_to_rgb(hue, lum, sat))
def get_infoproperties(self, item): infoproperties = {} infoproperties['watchedepisodes'] = item.get('watchedepisodes') infoproperties['metacritic_rating'] = '{0:.1f}'.format(utils.try_parse_float(item.get('ratings', {}).get('metacritic', {}).get('rating'))) infoproperties['imdb_rating'] = '{0:.1f}'.format(utils.try_parse_float(item.get('ratings', {}).get('imdb', {}).get('rating'))) infoproperties['imdb_votes'] = '{:0,.0f}'.format(utils.try_parse_float(item.get('ratings', {}).get('imdb', {}).get('votes'))) infoproperties['tmdb_rating'] = '{0:.1f}'.format(utils.try_parse_float(item.get('ratings', {}).get('themoviedb', {}).get('rating'))) infoproperties['tmdb_votes'] = '{:0,.0f}'.format(utils.try_parse_float(item.get('ratings', {}).get('themoviedb', {}).get('votes'))) infoproperties = utils.del_empty_keys(infoproperties, ['N/A', '0.0', '0']) return infoproperties
def get_airdates(self, item): if not item: return infoproperties = {} if item.get('last_episode_to_air'): i = item.get('last_episode_to_air', {}) infoproperties['last_aired'] = utils.date_to_format(i.get('air_date'), xbmc.getRegion('dateshort')) infoproperties['last_aired.long'] = utils.date_to_format(i.get('air_date'), xbmc.getRegion('datelong')) infoproperties['last_aired.day'] = utils.date_to_format(i.get('air_date'), "%A") infoproperties['last_aired.episode'] = i.get('episode_number') infoproperties['last_aired.name'] = i.get('name') infoproperties['last_aired.tmdb_id'] = i.get('id') infoproperties['last_aired.plot'] = i.get('overview') infoproperties['last_aired.season'] = i.get('season_number') infoproperties['last_aired.rating'] = '{:0,.1f}'.format(utils.try_parse_float(i.get('vote_average'))) infoproperties['last_aired.votes'] = i.get('vote_count') infoproperties['last_aired.thumb'] = self.get_season_thumb(i) if item.get('next_episode_to_air'): i = item.get('next_episode_to_air', {}) infoproperties['next_aired'] = utils.date_to_format(i.get('air_date'), xbmc.getRegion('dateshort')) infoproperties['next_aired.long'] = utils.date_to_format(i.get('air_date'), xbmc.getRegion('datelong')) infoproperties['next_aired.day'] = utils.date_to_format(i.get('air_date'), "%A") infoproperties['next_aired.episode'] = i.get('episode_number') infoproperties['next_aired.name'] = i.get('name') infoproperties['next_aired.tmdb_id'] = i.get('id') infoproperties['next_aired.plot'] = i.get('overview') infoproperties['next_aired.season'] = i.get('season_number') infoproperties['next_aired.thumb'] = self.get_season_thumb(i) return infoproperties
def __init__(self, cache_short=None, cache_long=None, req_api_url=None, req_api_key=None, req_api_name=None, req_wait_time=None): self.req_api_url = req_api_url or '' self.req_api_key = req_api_key or '' self.req_api_name = req_api_name or '' self.req_wait_time = req_wait_time or 0 self.req_connect_err_prop = 'TMDbHelper.ConnectionError.{}'.format( self.req_api_name) self.req_connect_err = utils.try_parse_float( xbmcgui.Window(10000).getProperty(self.req_connect_err_prop)) or 0 self.cache_long = 14 if not cache_long or cache_long < 14 else cache_long self.cache_short = 1 if not cache_short or cache_short < 1 else cache_short self.cache_name = 'plugin.video.themoviedb.helper' self.addon_name = 'plugin.video.themoviedb.helper' self.addon = xbmcaddon.Addon(self.addon_name) self.dialog_noapikey_header = '{0} {1} {2}'.format( self.addon.getLocalizedString(32007), self.req_api_name, self.addon.getLocalizedString(32008)) self.dialog_noapikey_text = self.addon.getLocalizedString(32009) self.dialog_noapikey_check = None
def __init__(self, method=None, artwork=None): Thread.__init__(self) self.image = artwork self.func = None self.save_prop = None self.save_path = 'special://profile/addon_data/plugin.video.themoviedb.helper/{}/' if method == 'blur': self.func = self.blur self.save_path = utils.makepath(self.save_path.format('blur')) self.save_prop = 'TMDbHelper.ListItem.BlurImage' elif method == 'crop': self.func = self.crop self.save_path = utils.makepath(self.save_path.format('crop')) self.save_prop = 'TMDbHelper.ListItem.CropImage' elif method == 'desaturate': self.func = self.desaturate self.save_path = utils.makepath( self.save_path.format('desaturate')) self.save_prop = 'TMDbHelper.ListItem.DesaturateImage' elif method == 'colors': self.func = self.colors self.save_path = utils.makepath(self.save_path.format('colors')) self.save_prop = 'TMDbHelper.ListItem.Colors' self.colors_lum = xbmc.getInfoLabel( 'Skin.String(TMDbHelper.Colors.Luminance)') self.colors_lum = utils.try_parse_float( self.colors_lum) if self.colors_lum else None self.colors_sat = xbmc.getInfoLabel( 'Skin.String(TMDbHelper.Colors.Saturation)') self.colors_sat = utils.try_parse_float( self.colors_sat) if self.colors_sat else None self.colors_cmp = xbmc.getInfoLabel( 'Skin.String(TMDbHelper.Colors.CompShift)') self.colors_cmp = utils.try_parse_float( self.colors_cmp) if self.colors_cmp else None self.colors_hue = xbmc.getInfoLabel( 'Skin.String(TMDbHelper.Colors.MainShift)') self.colors_hue = utils.try_parse_float( self.colors_hue) if self.colors_hue else None
def get_infolabels(self, item): infolabels = {} infolabels['title'] = self.get_title(item) infolabels['originaltitle'] = item.get('original_title') infolabels['tvshowtitle'] = item.get('tvshowtitle') infolabels['plot'] = item.get('overview') or item.get('biography') or item.get('content') infolabels['rating'] = '{:0,.1f}'.format(utils.try_parse_float(item.get('vote_average'))) infolabels['votes'] = '{:0,.0f}'.format(item.get('vote_count')) if item.get('vote_count') else None infolabels['premiered'] = item.get('air_date') or item.get('release_date') or item.get('first_air_date') or '' infolabels['year'] = infolabels.get('premiered')[:4] infolabels['imdbnumber'] = item.get('imdb_id') infolabels['tagline'] = item.get('tagline') infolabels['status'] = item.get('status') infolabels['episode'] = item.get('episode_number') if item.get('episode_number') or item.get('episode_number') == 0 else item.get('number_of_episodes') infolabels['season'] = item.get('season_number') if item.get('season_number') or item.get('season_number') == 0 else item.get('number_of_seasons') infolabels['genre'] = utils.dict_to_list(item.get('genres', []), 'name') if item.get('site') == 'YouTube' and item.get('key'): infolabels['path'] = 'plugin://plugin.video.youtube/play/?video_id={0}'.format(item.get('key')) if item.get('episode_run_time'): infolabels['duration'] = utils.try_parse_int(item.get('episode_run_time', [0])[0]) * 60 if item.get('runtime'): infolabels['duration'] = utils.try_parse_int(item.get('runtime', 0)) * 60 if item.get('belongs_to_collection'): infolabels['set'] = item.get('belongs_to_collection').get('name') if item.get('networks'): infolabels['studio'] = infolabels.setdefault('studio', []) + utils.dict_to_list(item.get('networks'), 'name') if item.get('production_companies'): infolabels['studio'] = infolabels.setdefault('studio', []) + utils.dict_to_list(item.get('production_companies'), 'name') if item.get('production_countries'): infolabels['country'] = infolabels.setdefault('country', []) + utils.dict_to_list(item.get('production_countries'), 'name') if item.get('origin_country'): infolabels['country'] = infolabels.setdefault('country', []) + item.get('origin_country') if item.get('release_dates') and item.get('release_dates').get('results'): for i in item.get('release_dates').get('results'): if i.get('iso_3166_1') and i.get('iso_3166_1') == self.iso_country: for i in sorted(i.get('release_dates', []), key=lambda k: k.get('type')): if i.get('certification'): infolabels['MPAA'] = '{0}{1}'.format(self.mpaa_prefix, i.get('certification')) break break if item.get('content_ratings') and item.get('content_ratings').get('results'): for i in item.get('content_ratings').get('results'): if i.get('iso_3166_1') and i.get('iso_3166_1') == self.iso_country and i.get('rating'): infolabels['MPAA'] = '{0}{1}'.format(self.mpaa_prefix, i.get('rating')) break return infolabels
def get_infoproperties(self, item): infoproperties = {} infoproperties['tmdb_id'] = item.get('id') infoproperties['imdb_id'] = item.get('imdb_id') or item.get( 'external_ids', {}).get('imdb_id') infoproperties['tvdb_id'] = item.get('external_ids', {}).get('tvdb_id') infoproperties['tvshow.tmdb_id'] = item.get('tvshow.tmdb_id') infoproperties['tvshow.imdb_id'] = item.get('tvshow.imdb_id') infoproperties['tvshow.tvdb_id'] = item.get('tvshow.tvdb_id') infoproperties['biography'] = item.get('biography') infoproperties['birthday'] = item.get('birthday') infoproperties['age'] = utils.age_difference(item.get('birthday'), item.get('deathday')) infoproperties['deathday'] = item.get('deathday') infoproperties['character'] = item.get('character') infoproperties['department'] = item.get('department') infoproperties['job'] = item.get('job') infoproperties['role'] = item.get('character') or item.get( 'job') or item.get('department') or item.get( 'known_for_department') infoproperties['born'] = item.get('place_of_birth') infoproperties['tmdb_rating'] = '{:0,.1f}'.format( utils.try_parse_float(item.get('vote_average'))) infoproperties['tmdb_votes'] = '{:0,.0f}'.format( item.get('vote_count')) if item.get('vote_count') else None if item.get('gender'): infoproperties['gender'] = self.addon.getLocalizedString( 32070) if item.get( 'gender') == 2 else self.addon.getLocalizedString(32071) if item.get('last_episode_to_air'): i = item.get('last_episode_to_air', {}) infoproperties['last_aired'] = i.get('air_date') infoproperties['last_aired.day'] = utils.date_to_format( i.get('air_date'), "%A") infoproperties['last_aired.episode'] = i.get('episode_number') infoproperties['last_aired.name'] = i.get('name') infoproperties['last_aired.tmdb_id'] = i.get('id') infoproperties['last_aired.plot'] = i.get('overview') infoproperties['last_aired.season'] = i.get('season_number') infoproperties['last_aired.rating'] = '{:0,.1f}'.format( utils.try_parse_float(i.get('vote_average'))) infoproperties['last_aired.votes'] = i.get('vote_count') infoproperties['last_aired.thumb'] = self.get_season_thumb(i) if item.get('next_episode_to_air'): i = item.get('next_episode_to_air', {}) infoproperties['next_aired'] = i.get('air_date') infoproperties['next_aired.day'] = utils.date_to_format( i.get('air_date'), "%A") infoproperties['next_aired.episode'] = i.get('episode_number') infoproperties['next_aired.name'] = i.get('name') infoproperties['next_aired.tmdb_id'] = i.get('id') infoproperties['next_aired.plot'] = i.get('overview') infoproperties['next_aired.season'] = i.get('season_number') infoproperties['next_aired.thumb'] = self.get_season_thumb(i) if item.get('created_by'): infoproperties = utils.iter_props(item.get('created_by'), 'Creator', infoproperties, name='name', tmdb_id='id') infoproperties = utils.iter_props(item.get('created_by'), 'Creator', infoproperties, thumb='profile_path', func=self.get_imagepath) infoproperties['creator'] = utils.concatinate_names( item.get('created_by'), 'name', '/') if item.get('genres'): infoproperties = utils.iter_props(item.get('genres'), 'Genre', infoproperties, name='name', tmdb_id='id') if item.get('networks'): infoproperties = utils.iter_props(item.get('networks'), 'Studio', infoproperties, name='name', tmdb_id='id') infoproperties = utils.iter_props(item.get('networks'), 'Studio', infoproperties, icon='logo_path', func=self.get_imagepath) if item.get('production_companies'): infoproperties = utils.iter_props(item.get('production_companies'), 'Studio', infoproperties, name='name', tmdb_id='id') infoproperties = utils.iter_props(item.get('production_companies'), 'Studio', infoproperties, icon='logo_path', func=self.get_imagepath) if item.get('production_countries'): infoproperties = utils.iter_props(item.get('production_countries'), 'Country', infoproperties, name='name', tmdb_id='id') if item.get('spoken_languages'): infoproperties = utils.iter_props(item.get('spoken_languages'), 'Language', infoproperties, name='name', iso='iso_639_1') if item.get('also_known_as'): infoproperties['aliases'] = ' / '.join(item.get('also_known_as')) if item.get('known_for'): infoproperties['known_for'] = utils.concatinate_names( item.get('known_for'), 'title', '/') infoproperties = utils.iter_props(item.get('known_for'), 'known_for', infoproperties, title='title', tmdb_id='id', rating='vote_average', tmdb_type='media_type') if item.get('budget'): infoproperties['budget'] = '${:0,.0f}'.format(item.get('budget')) if item.get('revenue'): infoproperties['revenue'] = '${:0,.0f}'.format(item.get('revenue')) if item.get('movie_credits'): infoproperties['numitems.tmdb.movies.cast'] = len( item.get('movie_credits', {}).get('cast', [])) or 0 infoproperties['numitems.tmdb.movies.crew'] = len( item.get('movie_credits', {}).get('crew', [])) or 0 infoproperties['numitems.tmdb.movies.total'] = utils.try_parse_int( infoproperties.get( 'numitems.tmdb.movies.cast')) + utils.try_parse_int( infoproperties.get('numitems.tmdb.movies.crew')) if item.get('tv_credits'): infoproperties['numitems.tmdb.tvshows.cast'] = len( item.get('tv_credits', {}).get('cast', [])) or 0 infoproperties['numitems.tmdb.tvshows.crew'] = len( item.get('tv_credits', {}).get('crew', [])) or 0 infoproperties[ 'numitems.tmdb.tvshows.total'] = utils.try_parse_int( infoproperties.get( 'numitems.tmdb.tvshows.cast')) + utils.try_parse_int( infoproperties.get('numitems.tmdb.tvshows.crew')) if item.get('movie_credits') or item.get('tv_credits'): infoproperties['numitems.tmdb.cast'] = utils.try_parse_int( infoproperties.get( 'numitems.tmdb.movies.cast')) + utils.try_parse_int( infoproperties.get('numitems.tmdb.tvshows.cast')) infoproperties['numitems.tmdb.crew'] = utils.try_parse_int( infoproperties.get( 'numitems.tmdb.movies.crew')) + utils.try_parse_int( infoproperties.get('numitems.tmdb.tvshows.crew')) infoproperties['numitems.tmdb.total'] = utils.try_parse_int( infoproperties.get('numitems.tmdb.cast') ) + utils.try_parse_int(infoproperties.get('numitems.tmdb.crew')) if item.get('belongs_to_collection'): infoproperties['set.tmdb_id'] = item.get( 'belongs_to_collection').get('id') infoproperties['set.name'] = item.get('belongs_to_collection').get( 'name') infoproperties['set.poster'] = self.get_imagepath( item.get('belongs_to_collection').get('poster_path')) infoproperties['set.fanart'] = self.get_imagepath( item.get('belongs_to_collection').get('backdrop_path')) if item.get('parts'): p = 0 year_l = 9999 year_h = 0 ratings = [] votes = 0 for i in item.get('parts', []): p += 1 infoproperties['set.{}.title'.format(p)] = i.get('title', '') infoproperties['set.{}.tmdb_id'.format(p)] = i.get('id', '') infoproperties['set.{}.originaltitle'.format(p)] = i.get( 'original_title', '') infoproperties['set.{}.plot'.format(p)] = i.get('overview', '') infoproperties['set.{}.premiered'.format(p)] = i.get( 'release_date', '') infoproperties['set.{}.year'.format(p)] = i.get( 'release_date', '')[:4] infoproperties['set.{}.rating'.format(p)] = '{:0,.1f}'.format( utils.try_parse_float(i.get('vote_average'))) infoproperties['set.{}.votes'.format(p)] = i.get( 'vote_count', '') infoproperties['set.{}.poster'.format(p)] = self.get_imagepath( i.get('poster_path', ''), True) infoproperties['set.{}.fanart'.format(p)] = self.get_imagepath( i.get('backdrop_path', '')) year_l = min( utils.try_parse_int(i.get('release_date', '')[:4]), year_l) year_h = max( utils.try_parse_int(i.get('release_date', '')[:4]), year_h) ratings.append(i.get('vote_average', '')) if i.get('vote_average') else None votes += utils.try_parse_int(i.get('vote_count', 0)) year_l = year_l if year_l != 9999 else None year_h = year_h if year_h else None infoproperties['set.year.first'] = year_l or '' infoproperties['set.year.last'] = year_h or '' infoproperties['set.years'] = '{0} - {1}'.format( year_l, year_h) if year_l and year_h else '' infoproperties['set.rating'] = infoproperties[ 'tmdb_rating'] = '{:0,.1f}'.format( sum(ratings) / len(ratings)) if len(ratings) else '' infoproperties['set.votes'] = infoproperties[ 'tmdb_votes'] = '{:0,.0f}'.format(votes) if votes else '' infoproperties['set.numitems'] = p or '' return infoproperties