Beispiel #1
0
def list_trakt_tvshows(results, pages, page):
    genres_dict = dict([(x['slug'], x['name'])
                        for x in Trakt.get_genres('shows')])
    try:
        shows = [
            meta_info.get_tvshow_metadata_trakt(item['show'], genres_dict)
            for item in results
        ]
    except KeyError:
        shows = [
            meta_info.get_tvshow_metadata_trakt(item, genres_dict)
            for item in results
        ]
    items = [make_tvshow_item(show) for show in shows if show.get('tvdb_id')]
    page = int(page)
    pages = int(pages)
    if pages > 1:
        args = nav_base.caller_args()
        args['page'] = page + 1
        args['confirm'] = 'yes'
        items.append({
            'label':
            '%s/%s  [I]Next page[/I]  >>' % (page + 1, pages + 1),
            'path':
            plugin.url_for(nav_base.caller_name(), **args),
            'thumbnail':
            plugin.get_media_icon('item_next'),
            'fanart':
            plugin.get_addon_fanart()
        })
    return plugin.finish(items=items, sort_methods=SORT)
Beispiel #2
0
def tv_trakt_popular(page, raw=False):
    results, pages = Trakt.get_popular_shows_paginated(page)
    if raw:
        return results
    else:
        genres_dict = dict([(x['slug'], x['name'])
                            for x in Trakt.get_genres('shows')])
        shows = [
            meta_info.get_tvshow_metadata_trakt(item, genres_dict)
            for item in results
        ]
        items = [
            make_tvshow_item(show) for show in shows if show.get('tvdb_id')
        ]
        page = int(page)
        pages = int(pages)
        if pages > 1:
            items.append({
                'label':
                '%s/%s  [I]Next page[/I]  >>' % (page + 1, pages + 1),
                'path':
                plugin.url_for('tv_trakt_popular', page=page + 1),
                'thumbnail':
                plugin.get_media_icon('item_next'),
                'fanart':
                plugin.get_addon_fanart()
            })
        return plugin.finish(items=items, sort_methods=SORT)
Beispiel #3
0
def lists_trakt_tv_collection(raw=False):
	results = sorted(Trakt.get_collection('shows'), key=lambda k: k['last_collected_at'], reverse=True)
	if raw:
		return results
	shows = [meta_info.get_tvshow_metadata_trakt(item['show']) for item in results]
	items = [make_tvshow_item(show) for show in shows if show.get('tvdb_id')]
	return items
Beispiel #4
0
def list_trakt_search_items(results, pages, page):
	shows = [meta_info.get_tvshow_metadata_trakt(item['show'], None) for item in results]
	items = [make_tvshow_item(show) for show in shows if show.get('tvdb_id')]
	page = int(page)
	pages = int(pages)
	if pages > 1:
		args = nav_base.caller_args()
		nextpage = page + 1
		args['page'] = page + 1
		items.append(
			{
				'label': '%s/%s  [I]Next page[/I]  >>' % (nextpage, pages),
				'path': plugin.url_for(nav_base.caller_name(), **args),
				'thumbnail': plugin.get_media_icon('item_next'),
				'fanart': plugin.get_addon_fanart()
			})
	return items
Beispiel #5
0
def trakt_play_episode(id, season, episode):
	from resources.lib.Trakt import get_show, get_season, get_seasons, get_episode
	id = int(id)
	season = int(season)
	episode = int(episode)
	show = None
	preason = None
	prepisode = None
	dbid = xbmc.getInfoLabel('ListItem.DBID')
	try:
		dbid = int(dbid)
	except:
		dbid = None
	show = get_show(id)
	if 'name' in show:
		show_title = show['name']
	elif 'title' in show:
		show_title = show['title']
	if show:
		if show['first_aired']:
			year = show['first_aired'][:4]
		else:
			year = None
		trakt_ids = play_base.get_trakt_ids('trakt', id, show_title, 'show', year)
		preason = get_season(id, season)
		if preason:
			prepisode = get_episode(id, season, episode)
		elif not preason and season > 1900: 
			seasons = get_seasons(id)
			for item in seasons:
				if item['first_aired'] != None:
					if int(item['first_aired'][:4]) == season: 
						season_number = item['number']
						preason = get_season(id, season_number)
	if not prepisode or not preason or not show:
		return tvmaze_play_episode(show_title, season, episode)
	show_info = meta_info.get_tvshow_metadata_trakt(show)
	season_info = meta_info.get_season_metadata_trakt(show_info, preason)
	episode_info = meta_info.get_episode_metadata_trakt(season_info, prepisode)
	title = show_info['name']
	if show_info['poster'] != None and show_info['poster'] != '':
		show_poster = show_info['poster']
	else:
		show_poster = ''
	if show_info['fanart'] != None and show_info['fanart'] != '':
		show_fanart = show_info['fanart']
	else:
		show_fanart = ''
	items = []
	play_plugin = meta_players.ADDON_SELECTOR.id
	players = meta_players.get_players('tvshows')
	players = [p for p in players if p.id == play_plugin] or players
	if not players:
		return xbmc.executebuiltin('Action(Info)')
	params = {}
	for lang in meta_players.get_needed_langs(players):
		if show['name'] is None:
			continue
		episode_parameters = get_trakt_episode_parameters(show, preason, prepisode)
		if episode_parameters is not None:
			params[lang] = episode_parameters
		else:
			if trakt_ids['tmdb'] != None and trakt_ids['tmdb'] != '' and tried != 'tmdb': 
				tried = 'tmdb'
				return tvdb_play_episode(trakt_ids['tvdb'], season, episode)
			elif tried == 'tmdb':
				msg = 'No TVDb or TMDb information found for %s - S%sE%s' % (show_info['name'], season, episode)
				plugin.ok('Episode information not found', msg)
			else:
				msg = 'No TMDb information found for %s - S%sE%s' % (show_info['name'], season, episode)
				plugin.ok('Episode information not found', msg)
		if trakt_ids != None:
			params[lang].update(trakt_ids)
		params[lang]['info'] = show_info
		params[lang] = text.to_unicode(params[lang])
	link = play_base.on_play_video(players, params, trakt_ids)
	if link:
		plugin.setProperty('plugin.video.openmeta.data', json.dumps(
			{
				'dbid': dbid,
				'trakt': id,
				'season': season,
				'episode': episode
			}))
		episode_metadata = meta_info.get_episode_metadata_trakt(season_info, prepisode)
		play_base.action_play(
			{
				'label': episode_info['title'],
				'path': link,
				'info': episode_info,
				'is_playable': True,
				'info_type': 'video',
				'thumbnail': episode_info['poster'],
				'poster': episode_info['poster'],
				'fanart': str(show_info['fanart'])
			})
Beispiel #6
0
def list_trakt_episodes(result):
    genres_dict = dict([(x['slug'], x['name'])
                        for x in Trakt.get_genres('shows')])
    items = []
    for item in result:
        if 'episode' in item:
            episode = item['episode']
        else:
            episode = item
        if 'show' in item:
            show = item['show']
        try:
            show_id = item['show']['ids']['tvdb']
        except:
            show_id = item['ids'].get('tvdb')
        try:
            id = episode['show']['ids']['tvdb']
        except:
            id = episode['ids'].get('tvdb')
        if not id:
            continue
        try:
            season_num = episode['season']
        except:
            season_num = episode.get('season')
        try:
            episode_num = episode['number']
        except:
            episode_num = episode.get('number')
        if show:
            tvshow_title = show.get('title').encode('utf-8')
        else:
            try:
                tvshow_title = (episode['show']['title']).encode('utf-8')
            except:
                tvshow_title = str(episode.get('title')).encode('utf-8')
        if episode['title'] != None:
            try:
                episode_title = episode['title'].encode('utf-8')
            except:
                episode_title = episode.get('title').encode('utf-8')
        else:
            episode_title = 'TBA'
        info = meta_info.get_tvshow_metadata_trakt(item['show'], genres_dict)
        episode_info = meta_info.get_episode_metadata_trakt(info, episode)
        episode_info['title'] = '%s (%02dx%02d): %s' % (
            tvshow_title, season_num, episode_num, episode_title)
        context_menu = []
        showdata = TVDB[int(show_id)]
        # extradata = play_tvshows.get_episode_parameters(showdata, season_num, episode_num)
        properties = {}
        try:
            if traktenabled and countenabled:
                playdata = get_show_play_count(info['trakt_id'])
                season_index = nav_base.get_play_count_info(
                    playdata, season_num)
                properties = {
                    'TotalSeasons': len(playdata['seasons']),
                    'TotalEpisodes':
                    playdata['seasons'][season_index]['aired'],
                    # 'WatchedEpisodes': playdata['seasons'][season_index]['completed'],
                    # 'UnWatchedEpisodes': playdata['seasons'][season_index]['aired'] - playdata['seasons'][season_index]['completed']
                }
                episode_info.update({
                    'playcount':
                    nav_base.get_play_count_info(playdata, season_num,
                                                 episode_num)
                })
        except:
            pass
        episodeitem = {
            'label':
            episode_info['title'],
            'path':
            plugin.url_for('tv_play',
                           id=id,
                           season=season_num,
                           episode=episode_num,
                           usedefault=True),
            'context_menu':
            context_menu,
            'info':
            episode_info,
            'is_playable':
            True,
            'info_type':
            'video',
            'stream_info': {
                'video': {}
            },
            'properties':
            properties,
            'thumbnail':
            episode_info['fanart'],
            'poster':
            episode_info['poster'],
            'fanart':
            episode_info['fanart']
        }

        if enablefanart:
            try:
                art = get_fanarttv_art(info['tvdb_id'],
                                       query='episode',
                                       season=season_num)
                art = checkart(art)
                episodeitem.update(art)
            except:
                pass
        items.append(episodeitem)
    return plugin.finish(items=items,
                         sort_methods=SORTRAKT,
                         cache_to_disc=False)
Beispiel #7
0
def _lists_trakt_show_tv_list(list_items):
    genres_dict = dict([(x['slug'], x['name'])
                        for x in Trakt.get_genres('shows')])
    items = []
    for list_item in list_items:
        item = None
        item_type = list_item['type']
        if item_type == 'show':
            tvdb_id = list_item['show']['ids']['tvdb']
            if tvdb_id != '' and tvdb_id != None:
                show = list_item['show']
                info = meta_info.get_tvshow_metadata_trakt(show, genres_dict)
                item = make_tvshow_item(info)
            else:
                item = None
        elif item_type == 'season':
            tvdb_id = list_item['show']['ids']['tvdb']
            season = list_item['season']
            show = list_item['show']
            show_info = meta_info.get_tvshow_metadata_trakt(show, genres_dict)
            season_info = meta_info.get_season_metadata_trakt(
                show_info, season, genres_dict)
            label = '%s - Season %s' % (show['title'], season['number'])
            properties = {}
            try:
                if traktenabled and countenabled:
                    if 'trakt' in list_item['show']['ids'].keys(
                    ) and list_item['show']['ids']['trakt'] != '':
                        id = list_item['show']['ids']['trakt']
                    else:
                        id = Trakt.find_trakt_ids('tvdb', tvdb_id,
                                                  'show')['trakt']
                    playdata = get_show_play_count(id)
                    season_index = nav_base.get_play_count_info(
                        playdata, season['number'])
                    properties = {
                        'TotalSeasons':
                        len(playdata['seasons']),
                        'TotalEpisodes':
                        playdata['seasons'][season_index]['aired'],
                        'WatchedEpisodes':
                        playdata['seasons'][season_index]['completed'],
                        'UnWatchedEpisodes':
                        playdata['seasons'][season_index]['aired'] -
                        playdata['seasons'][season_index]['completed']
                    }
                    if properties['UnWatchedEpisodes'] == 0:
                        season_info.update({'playcount': 1})
            except:
                pass
            item = ({
                'label':
                label,
                'path':
                plugin.url_for('tv_season',
                               id=tvdb_id,
                               season_num=list_item['season']['number']),
                'info':
                season_info,
                'properties':
                properties,
                'thumbnail':
                season_info['poster'],
                'poster':
                season_info['poster'],
                'fanart':
                season_info['fanart']
            })
        elif item_type == 'episode':
            tvdb_id = list_item['show']['ids']['tvdb']
            episode = list_item['episode']
            show = list_item['show']
            season_number = episode['season']
            episode_number = episode['number']
            show_info = meta_info.get_tvshow_metadata_trakt(show, genres_dict)
            episode_info = meta_info.get_episode_metadata_trakt(
                show_info, episode)
            properties = {}
            try:
                if traktenabled and countenabled:
                    if 'trakt' in list_item['show']['ids'].keys(
                    ) and list_item['show']['ids']['trakt'] != '':
                        id = list_item['show']['ids']['trakt']
                    else:
                        id = Trakt.find_trakt_ids('tvdb', tvdb_id,
                                                  'show')['trakt']
                    playdata = get_show_play_count(id)
                    season_index = nav_base.get_play_count_info(
                        playdata, season_number, episode_number)
                    properties = {
                        'TotalSeasons':
                        len(playdata['seasons']),
                        'TotalEpisodes':
                        playdata['seasons'][season_index]['aired'],
                        # 'WatchedEpisodes': playdata['seasons'][season_index]['completed'],
                        # 'UnWatchedEpisodes': playdata['seasons'][season_index]['aired'] - playdata['seasons'][season_index]['completed']
                    }
                    episode_info.update({
                        'playcount':
                        nav_base.get_play_count_info(playdata, season_number,
                                                     episode_number)
                    })
            except:
                pass
            label = '%s - S%sE%s - %s' % (show_info['title'], season_number,
                                          episode_number,
                                          episode_info['title'])
            item = ({
                'label':
                label,
                'path':
                plugin.url_for('tv_play',
                               id=tvdb_id,
                               season=season_number,
                               episode=episode_number),
                'info':
                episode_info,
                'is_playable':
                True,
                'info_type':
                'video',
                'stream_info': {
                    'video': {}
                },
                'properties':
                properties,
                'thumbnail':
                episode_info['poster'],
                'poster':
                episode_info['poster'],
                'fanart':
                episode_info['fanart']
            })

            if enablefanart:
                try:
                    art = get_fanarttv_art(tvdb_id)
                    art = checkart(art)
                    item.update(art)
                except:
                    pass
        if item is not None:
            items.append(item)
    return items
Beispiel #8
0
def _lists_trakt_show_tv_list(list_items):
    genres_dict = dict([(x['slug'], x['name'])
                        for x in Trakt.get_genres('shows')])
    items = []
    for list_item in list_items:
        item = None
        item_type = list_item['type']
        if item_type == 'show':
            tvdb_id = list_item['show']['ids']['tvdb']
            if tvdb_id != '' and tvdb_id != None:
                show = list_item['show']
                info = meta_info.get_tvshow_metadata_trakt(show, genres_dict)
                item = make_tvshow_item(info)
            else:
                item = None
        elif item_type == 'season':
            tvdb_id = list_item['show']['ids']['tvdb']
            season = list_item['season']
            show = list_item['show']
            show_info = meta_info.get_tvshow_metadata_trakt(show, genres_dict)
            season_info = meta_info.get_season_metadata_trakt(
                show_info, season, genres_dict)
            label = '%s - Season %s' % (show['title'], season['number'])
            item = ({
                'label':
                label,
                'path':
                plugin.url_for('tv_season',
                               id=tvdb_id,
                               season_num=list_item['season']['number']),
                'info':
                season_info,
                'thumbnail':
                season_info['poster'],
                'poster':
                season_info['poster'],
                'fanart':
                season_info['fanart']
            })
        elif item_type == 'episode':
            tvdb_id = list_item['show']['ids']['tvdb']
            episode = list_item['episode']
            show = list_item['show']
            season_number = episode['season']
            episode_number = episode['number']
            show_info = meta_info.get_tvshow_metadata_trakt(show, genres_dict)
            episode_info = meta_info.get_episode_metadata_trakt(
                show_info, episode)
            label = '%s - S%sE%s - %s' % (show_info['title'], season_number,
                                          episode_number,
                                          episode_info['title'])
            item = ({
                'label':
                label,
                'path':
                plugin.url_for('tv_play',
                               id=tvdb_id,
                               season=season_number,
                               episode=episode_number),
                'info':
                episode_info,
                'is_playable':
                True,
                'info_type':
                'video',
                'stream_info': {
                    'video': {}
                },
                'thumbnail':
                episode_info['poster'],
                'poster':
                episode_info['poster'],
                'fanart':
                episode_info['fanart']
            })
        if item is not None:
            items.append(item)
    return items
Beispiel #9
0
def list_trakt_episodes(result):
    genres_dict = dict([(x['slug'], x['name'])
                        for x in Trakt.get_genres('shows')])
    items = []
    for item in result:
        if 'episode' in item:
            episode = item['episode']
        else:
            episode = item
        if 'show' in item:
            show = item['show']
        try:
            id = episode['show']['ids']['tvdb']
        except:
            id = episode['ids'].get('tvdb')
        if not id:
            continue
        try:
            season_num = episode['season']
        except:
            season_num = episode.get('season')
        try:
            episode_num = episode['number']
        except:
            episode_num = episode.get('number')
        if show:
            tvshow_title = show.get('title').encode('utf-8')
        else:
            try:
                tvshow_title = (episode['show']['title']).encode('utf-8')
            except:
                tvshow_title = str(episode.get('title')).encode('utf-8')
        if episode['title'] != None:
            try:
                episode_title = episode['title'].encode('utf-8')
            except:
                episode_title = episode.get('title').encode('utf-8')
        else:
            episode_title = 'TBA'
        info = meta_info.get_tvshow_metadata_trakt(item['show'], genres_dict)
        episode_info = meta_info.get_episode_metadata_trakt(info, episode)
        episode_info['title'] = '%s (%02dx%02d): %s' % (
            tvshow_title, season_num, episode_num, episode_title)
        if xbmc.getCondVisibility('system.hasaddon(script.extendedinfo)'):
            context_menu = [(
                'OpenInfo',
                'RunScript(script.extendedinfo,info=extendedepisodeinfo,tvshow=%s,season=%s,episode=%s)'
                % (tvshow_title, season_num, episode_num))]
        else:
            context_menu = []
        items.append({
            'label':
            episode_info['title'],
            'path':
            plugin.url_for('tv_play',
                           id=id,
                           season=season_num,
                           episode=episode_num),
            'context_menu':
            context_menu,
            'info':
            episode_info,
            'is_playable':
            True,
            'info_type':
            'video',
            'stream_info': {
                'video': {}
            },
            'thumbnail':
            episode_info['poster'],
            'poster':
            episode_info['poster'],
            'fanart':
            episode_info['fanart']
        })
    return plugin.finish(items=items,
                         sort_methods=SORTRAKT,
                         cache_to_disc=False)
Beispiel #10
0
def _lists_trakt_show_list(list_items):
    from resources.lib.TheMovieDB import People
    #genres_dict = Trakt.get_genres('tv')
    items = []
    for list_item in list_items:
        item = None
        item_type = list_item['type']
        if item_type == 'show':
            tvdb_id = list_item['show']['ids']['tvdb']
            if tvdb_id != '' and tvdb_id != None:
                show = list_item['show']
                info = meta_info.get_tvshow_metadata_trakt(show)
                item = nav_tvshows.make_tvshow_item(info)
            else:
                item = None
        elif item_type == 'season':
            tvdb_id = list_item['show']['ids']['tvdb']
            season = list_item['season']
            show = list_item['show']
            show_info = meta_info.get_tvshow_metadata_trakt(show)
            season_info = meta_info.get_season_metadata_trakt(
                show_info, season)
            label = '%s - Season %s' % (show['title'], season['number'])
            item = ({
                'label':
                label,
                'path':
                plugin.url_for('tv_season',
                               id=tvdb_id,
                               season_num=list_item['season']['number']),
                'info':
                season_info,
                'thumbnail':
                season_info['poster'],
                'poster':
                season_info['poster'],
                'properties': {
                    'fanart_image': season_info['fanart']
                }
            })
        elif item_type == 'episode':
            tvdb_id = list_item['show']['ids']['tvdb']
            episode = list_item['episode']
            show = list_item['show']
            season_number = episode['season']
            episode_number = episode['number']
            show_info = meta_info.get_tvshow_metadata_trakt(show)
            episode_info = meta_info.get_episode_metadata_trakt(
                show_info, episode)
            label = '%s - S%sE%s - %s' % (show_info['title'], season_number,
                                          episode_number,
                                          episode_info['title'])
            item = ({
                'label':
                label,
                'path':
                plugin.url_for('tv_play',
                               id=tvdb_id,
                               season=season_number,
                               episode=episode_number),
                'info':
                episode_info,
                'is_playable':
                True,
                'info_type':
                'video',
                'stream_info': {
                    'video': {}
                },
                'thumbnail':
                episode_info['poster'],
                'poster':
                episode_info['poster'],
                'properties': {
                    'fanart_image': episode_info['fanart']
                }
            })
        elif item_type == 'movie':
            movie = list_item['movie']
            movie_info = meta_info.get_trakt_movie_metadata(movie)
            try:
                tmdb_id = movie_info['tmdb']
            except:
                tmdb_id = ''
            try:
                imdb_id = movie_info['imdb']
            except:
                imdb_id = ''
            if tmdb_id != None and tmdb_id != '':
                src = 'tmdb'
                id = tmdb_id
            elif imdb_id != None and mdb_id != '':
                src = 'imdb'
                id = imdb_id
            else:
                src = ''
                id = ''
            if src == '':
                item = None
            item = nav_movies.make_movie_item(movie_info)
        elif item_type == 'person':
            person_id = list_item['person']['ids']['trakt']
            person_tmdb_id = list_item['person']['ids']['tmdb']
            try:
                person_images = People(person_tmdb_id).images()['profiles']
                person_image = 'https://image.tmdb.org/t/p/w640' + person_images[
                    0]['file_path']
            except:
                person_image = ''
            person_name = text.to_utf8(list_item['person']['name'])
            item = ({
                'label':
                person_name,
                'path':
                plugin.url_for('trakt_movies_person', person_id=person_id),
                'thumbnail':
                person_image,
                'poster':
                person_image,
                'properties': {
                    'fanart_image': person_image
                }
            })
        if item is not None:
            items.append(item)
    for item in items:
        item['properties'] = {'fanart_image': plugin.get_addon_fanart()}
    return items