Skip to content

Instantly share code, notes, and snippets.

@henryjfry
Created January 12, 2020 18:15
Show Gist options
  • Save henryjfry/4d60e5087ee38a042415ae6bd72628fd to your computer and use it in GitHub Desktop.
Save henryjfry/4d60e5087ee38a042415ae6bd72628fd to your computer and use it in GitHub Desktop.
TMDB Helper - Trakt Upnext Sort Premiered ~/.kodi/addons/plugin.video.themoviedb.helper/resources/lib/container.py
#######################################################
def get_sortedlist2(self, items):
items = sorted(items, key=lambda x: x['infolabels']['premiered'], reverse=True)
# for i in items2:
# xbmc.log(str(i.infolabels['premiered'])+'===>TMDB HELPER', level=xbmc.LOGNOTICE)
if not items:
return
added, dbiditems, tmdbitems, lastitems, firstitems, nextpage = [], [], [], [], [], []
mixed_movies, mixed_tvshows = 0, 0
if self.item_tmdbtype in ['season', 'episode'] and self.params.get('tmdb_id'):
if not self.details_tv:
self.details_tv = self.tmdb.get_detailed_item('tv', self.params.get('tmdb_id'), season=self.params.get('season', None))
if self.fanarttv and self.details_tv and self.exp_fanarttv():
tvdb_id = self.tmdb.get_item_externalid('tv', self.params.get('tmdb_id'), 'tvdb_id')
artwork = self.fanarttv.get_tvshow_allart_lc(tvdb_id)
self.details_tv['clearart'] = artwork.get('clearart')
self.details_tv['clearlogo'] = artwork.get('clearlogo')
self.details_tv['landscape'] = artwork.get('landscape')
self.details_tv['banner'] = artwork.get('banner')
self.details_tv['fanart'] = self.details_tv.get('fanart') or artwork.get('fanart')
if self.item_tmdbtype == 'season' and self.details_tv:
item_upnext = ListItem(library=self.library, **self.details_tv)
item_upnext.infolabels['season'] = self.addon.getLocalizedString(32043)
item_upnext.label = self.addon.getLocalizedString(32043)
item_upnext.url = {'info': 'trakt_upnext', 'type': 'tv'}
items.append(item_upnext)
for i in items:
# xbmc.log(str(i.infolabels['premiered'])+'===>TMDB HELPER', level=xbmc.LOGNOTICE)
if i.nextpage:
i.url = self.params.copy()
i.url['page'] = i.nextpage
i.icon = '{0}/resources/icons/tmdb/nextpage.png'.format(self.addonpath)
if self.params.get('nextpage'):
nextpage.append(i)
continue
name = u'{0}{1}'.format(i.label, i.imdb_id or i.tmdb_id or i.poster)
if name in added:
continue
added.append(name)
if i.mixed_type == 'tv':
mixed_tvshows += 1
elif i.mixed_type == 'movie':
mixed_movies += 1
if self.details_tv:
season_num = i.infolabels.get('season')
i.cast = self.details_tv.get('cast', []) + i.cast
i.infolabels = utils.merge_two_dicts(self.details_tv.get('infolabels', {}), utils.del_empty_keys(i.infolabels))
i.infoproperties = utils.merge_two_dicts(self.details_tv.get('infoproperties', {}), utils.del_empty_keys(i.infoproperties))
i.poster = i.poster or self.details_tv.get('poster')
i.fanart = i.fanart if i.fanart and i.fanart != '{0}/fanart.jpg'.format(self.addonpath) else self.details_tv.get('fanart')
i.infolabels['season'] = season_num
i.dbid = self.get_db_info(
info='dbid', tmdbtype=self.item_tmdbtype, imdb_id=i.imdb_id,
originaltitle=i.infolabels.get('originaltitle'), title=i.infolabels.get('title'), year=i.infolabels.get('year'),
tvshowtitle=i.infolabels.get('tvshowtitle'), season=i.infolabels.get('season'), episode=i.infolabels.get('episode'))
i.infoproperties['widget'] = self.plugincategory
firstitems.append(i)
if mixed_movies or mixed_tvshows:
self.mixed_containercontent = 'tvshows' if mixed_tvshows > mixed_movies else 'movies'
self.numitems_dbid = len(dbiditems) or 0
self.numitems_tmdb = len(tmdbitems) or 0
xbmcplugin.setProperty(self.handle, 'NumItems.DBID', str(self.numitems_dbid))
xbmcplugin.setProperty(self.handle, 'NumItems.TMDB', str(self.numitems_tmdb))
return firstitems + nextpage
#######################################################
def list_trakthistory(self):
traktapi = TraktAPI(tmdb=self.tmdb)
userslug = traktapi.get_usernameslug(login=True)
self.item_tmdbtype = self.params.get('type')
list_sort2 = False
if self.params.get('info') == 'trakt_nextepisodes':
items = traktapi.get_inprogress(userslug, limit=300, episodes=True)
list_sort2 = True
self.item_tmdbtype = 'episode'
elif self.params.get('info') == 'trakt_inprogress':
items = traktapi.get_inprogress(userslug, limit=300)
elif self.params.get('info') == 'trakt_mostwatched':
items = traktapi.get_mostwatched(userslug, self.params.get('type'), limit=300)
elif self.params.get('info') == 'trakt_history':
items = traktapi.get_recentlywatched(userslug, self.params.get('type'), limit=300)
if list_sort2 == True:
self.list_items2(
items=items, url={
'info': 'trakt_upnext' if self.params.get('info') == 'trakt_inprogress' else 'details',
'type': self.item_tmdbtype})
else:
self.list_items(
items=items, url={
'info': 'trakt_upnext' if self.params.get('info') == 'trakt_inprogress' else 'details',
'type': self.item_tmdbtype})
def list_traktupnext(self):
self.item_tmdbtype = 'episode'
self.list_items2(
items=TraktAPI(tmdb=self.tmdb).get_upnext_episodes(tmdb_id=self.params.get('tmdb_id')),
url_tmdb_id=self.params.get('tmdb_id'),
url={'info': 'details', 'type': 'episode'})
#######################################################
def list_items2(self, items=None, url=None, url_tmdb_id=None):
items = self.get_sortedlist2(items)
if not items:
return
self.item_dbtype = utils.type_convert(self.item_tmdbtype, 'dbtype')
self.containercontent = self.mixed_containercontent or utils.type_convert(self.item_tmdbtype, 'container')
trakt_watched = self.get_trakt_watched()
trakt_unwatched = self.get_trakt_unwatched()
x = 0
self.start_container()
for i in items:
i.infoproperties['numitems.dbid'] = self.numitems_dbid
i.infoproperties['numitems.tmdb'] = self.numitems_tmdb
i.get_details(self.item_dbtype, self.tmdb, self.omdb, self.params.get('localdb'))
i.get_url(url, url_tmdb_id, self.params.get('widget'), self.params.get('fanarttv'), self.params.get('nextpage'), self.params.get('extended'))
i.get_extra_artwork(self.tmdb, self.fanarttv) if len(items) < 22 and self.exp_fanarttv() else None
i.get_trakt_watched(trakt_watched) if x == 0 or self.params.get('info') != 'details' else None
i.get_trakt_unwatched(trakt=TraktAPI(tmdb=self.tmdb), request=trakt_unwatched, check_sync=self.check_sync) if x == 0 or self.params.get('info') != 'details' else None
i.create_listitem(self.handle, **i.url) if not self.params.get('random') else self.randomlist.append(i)
x += 1
self.finish_container()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment