def add_items(self, items=None, pagination=True, parent_params=None, property_params=None, kodi_db=None, tmdb_cache_only=True): if not items: return check_is_aired = parent_params.get('info') not in NO_LABEL_FORMATTING for i in items: if not pagination and 'next_page' in i: continue if self.item_is_excluded(i): continue li = ListItem(parent_params=parent_params, **i) li.set_details(details=self.get_tmdb_details(li, cache_only=tmdb_cache_only)) # Quick because only get cached li.set_episode_label() if check_is_aired and li.is_unaired(): continue li.set_details(details=self.get_ftv_artwork(li), reverse=True) # Slow when not cache only li.set_details(details=self.get_kodi_details(li), reverse=True) # Quick because local db li.set_playcount(playcount=self.get_playcount_from_trakt(li)) # Quick because of agressive caching of Trakt object and pre-emptive dict comprehension if self.hide_watched and try_int(li.infolabels.get('playcount')) != 0: continue li.set_context_menu() # Set the context menu items li.set_uids_to_info() # Add unique ids to properties so accessible in skins li.set_params_reroute(self.ftv_forced_lookup, self.flatten_seasons) # Reroute details to proper end point li.set_params_to_info(self.plugin_category) # Set path params to properties for use in skins li.infoproperties.update(property_params or {}) xbmcplugin.addDirectoryItem( handle=self.handle, url=li.get_url(), listitem=li.get_listitem(), isFolder=li.is_folder)
def add_items(self, items=None, pagination=True, parent_params=None, property_params=None, kodi_db=None, cache_only=True): if not items: return check_is_aired = parent_params.get('info') not in NO_LABEL_FORMATTING hide_nodate = ADDON.getSettingBool('nodate_is_unaired') # Pre-game details and artwork cache for seasons/episodes before threading to avoid multiple API calls ftv_art = None if parent_params.get('info') in ['seasons', 'episodes', 'episode_groups', 'trakt_upnext']: details = self.tmdb_api.get_details('tv', parent_params.get('tmdb_id'), parent_params.get('season', 0), cache_only=cache_only) ftv_art = self.get_ftv_artwork(ListItem(parent_params=parent_params, **details)) # Build empty queue and thread pool self.items_queue, pool = [None] * len(items), [None] * len(items) # Start item build threads for x, i in enumerate(items): if not pagination and 'next_page' in i: continue if self.item_is_excluded(i): continue li = ListItem(parent_params=parent_params, **i) pool[x] = Thread(target=self._add_item, args=[x, li, cache_only, ftv_art]) pool[x].start() # Wait to join threads in pool first before adding item to directory for x, i in enumerate(pool): if not i: continue i.join() li = self.items_queue[x] if not li: continue li.set_episode_label() if check_is_aired and li.is_unaired(no_date=hide_nodate): continue li.set_details(details=self.get_kodi_details(li), reverse=True) # Quick because local db li.set_playcount(playcount=self.get_playcount_from_trakt(li)) # Quick because of agressive caching of Trakt object and pre-emptive dict comprehension if self.hide_watched and try_int(li.infolabels.get('playcount')) != 0: continue li.set_cast() li.set_context_menu() # Set the context menu items li.set_uids_to_info() # Add unique ids to properties so accessible in skins li.set_thumb_to_art(self.thumb_override == 2) if self.thumb_override else None li.set_params_reroute(self.ftv_forced_lookup, self.flatten_seasons) # Reroute details to proper end point li.set_params_to_info(self.plugin_category) # Set path params to properties for use in skins li.infoproperties.update(property_params or {}) if self.thumb_override: li.infolabels.pop('dbid', None) # Need to pop the DBID if overriding thumb otherwise Kodi overrides after item is created xbmcplugin.addDirectoryItem( handle=self.handle, url=li.get_url(), listitem=li.get_listitem(), isFolder=li.is_folder)
def add_items(self, items=None, pagination=True, parent_params=None, property_params=None, kodi_db=None, tmdb_cache_only=True): if not items: return self.check_is_aired = parent_params.get('info') not in NO_LABEL_FORMATTING # Build empty queue and thread pool self.items_queue, pool = [None] * len(items), [None] * len(items) # Start item build threads for x, i in enumerate(items): if not pagination and 'next_page' in i: continue if self.item_is_excluded(i): continue li = ListItem(parent_params=parent_params, **i) pool[x] = Thread(target=self._add_item, args=[x, li, tmdb_cache_only]) pool[x].start() # Wait to join threads in pool first before adding item to directory for x, i in enumerate(pool): if not i: continue i.join() li = self.items_queue[x] if not li: continue li.set_episode_label() if self.check_is_aired and li.is_unaired(): return li.set_details(details=self.get_kodi_details(li), reverse=True) # Quick because local db li.set_playcount(playcount=self.get_playcount_from_trakt(li)) # Quick because of agressive caching of Trakt object and pre-emptive dict comprehension if self.hide_watched and try_int(li.infolabels.get('playcount')) != 0: continue li.set_context_menu() # Set the context menu items li.set_uids_to_info() # Add unique ids to properties so accessible in skins li.set_params_reroute(self.ftv_forced_lookup, self.flatten_seasons) # Reroute details to proper end point li.set_params_to_info(self.plugin_category) # Set path params to properties for use in skins li.infoproperties.update(property_params or {}) xbmcplugin.addDirectoryItem( handle=self.handle, url=li.get_url(), listitem=li.get_listitem(), isFolder=li.is_folder)