def get_kodi_item(self): """ Creates an Kodi ListItem object for this channel :return: a Kodi ListItem with all required properties set. :rtype: xbmcgui.ListItem """ name = HtmlEntityHelper.convert_html_entities(self.channelName) description = HtmlEntityHelper.convert_html_entities( self.channelDescription) if self.uses_external_addon: from resources.lib.xbmcwrapper import XbmcWrapper name = "{} {}".format( name, XbmcWrapper.get_external_add_on_label(self.addonUrl)) self.icon = self.__get_image_path(self.icon) item = kodifactory.list_item(name, description) item.setArt({'thumb': self.icon, 'icon': self.icon}) # http://mirrors.kodi.tv/docs/python-docs/14.x-helix/xbmcgui.html#ListItem-setInfo item.setInfo( "video", { "Title": name, # "Count": self.sortOrderPerCountry, # "TrackNumber": self.sortOrder, "Genre": LanguageHelper.get_full_language(self.language), # "Tagline": description, "Plot": description }) if self.poster is not None: self.poster = self.__get_image_path(self.poster) item.setArt({'poster': self.poster}) if AddonSettings.hide_fanart(): return item if self.fanart is not None: self.fanart = self.__get_image_path(self.fanart) else: self.fanart = Config.fanart item.setArt({'fanart': self.fanart}) return item
def show_categories(self): """ Displays the show_categories that are currently available in XOT as a directory listing. :return: indication if all succeeded. :rtype: bool """ Logger.info("Plugin::show_categories") channel_register = ChannelIndex.get_register() categories = channel_register.get_categories() kodi_items = [] icon = Config.icon fanart = Config.fanart for category in categories: name = LanguageHelper.get_localized_category(category) kodi_item = xbmcgui.ListItem(name, name) # set art try: kodi_item.setIconImage(icon) except: # it was deprecated pass kodi_item.setArt({'thumb': icon, 'icon': icon}) kodi_item.setProperty(self.propertyRetrospect, "true") kodi_item.setProperty(self.propertyRetrospectCategory, "true") if not AddonSettings.hide_fanart(): kodi_item.setArt({'fanart': fanart}) url = self._create_action_url(None, action=self.actionListCategory, category=category) kodi_items.append((url, kodi_item, True)) # Logger.Trace(kodi_items) ok = xbmcplugin.addDirectoryItems(self.handle, kodi_items, len(kodi_items)) xbmcplugin.addSortMethod(handle=self.handle, sortMethod=xbmcplugin.SORT_METHOD_LABEL) xbmcplugin.endOfDirectory(self.handle, ok) return ok
def get_kodi_item(self): """ Creates an Kodi ListItem object for this channel :return: a Kodi ListItem with all required properties set. :rtype: xbmcgui.ListItem """ name = HtmlEntityHelper.convert_html_entities(self.channelName) description = HtmlEntityHelper.convert_html_entities( self.channelDescription) if self.uses_external_addon: other = LanguageHelper.get_localized_string( LanguageHelper.OtherAddon) name = "{0} {1} [COLOR gold]{2}[/COLOR]".format( name, unichr(187), other) self.icon = self.__get_image_path(self.icon) item = xbmcgui.ListItem(name, description) item.setArt({'thumb': self.icon, 'icon': self.icon}) # http://mirrors.kodi.tv/docs/python-docs/14.x-helix/xbmcgui.html#ListItem-setInfo item.setInfo( "video", { "Title": name, # "Count": self.sortOrderPerCountry, # "TrackNumber": self.sortOrder, "Genre": LanguageHelper.get_full_language(self.language), # "Tagline": description, "Plot": description }) if AddonSettings.hide_fanart(): return item if self.fanart is not None: self.fanart = self.__get_image_path(self.fanart) else: self.fanart = os.path.join(Config.rootDir, "fanart.jpg") item.setArt({'fanart': self.fanart}) return item
def show_channel_list(self, category=None): """ Displays the channels that are currently available in XOT as a directory listing. :param str category: The category to show channels for """ if category: Logger.info("Plugin::show_channel_list for %s", category) else: Logger.info("Plugin::show_channel_list") try: # only display channels channel_register = ChannelIndex.get_register() channels = channel_register.get_channels() xbmc_items = [] # Should we show the "All Favourites"? if AddonSettings.show_show_favourites_in_channel_list(): icon = Config.icon fanart = Config.fanart name = LanguageHelper.get_localized_string( LanguageHelper.AllFavouritesId) kodi_item = xbmcgui.ListItem(name, name) # set art try: kodi_item.setIconImage(icon) except: # it was deprecated pass kodi_item.setArt({'thumb': icon, 'icon': icon}) kodi_item.setProperty(self.propertyRetrospect, "true") kodi_item.setProperty(self.propertyRetrospectCategory, "true") if not AddonSettings.hide_fanart(): kodi_item.setArt({'fanart': fanart}) url = self._create_action_url(None, action=self.actionAllFavourites) xbmc_items.append((url, kodi_item, True)) for channel in channels: if category and channel.category != category: Logger.debug("Skipping %s (%s) due to category filter", channel.channelName, channel.category) continue # Get the Kodi item item = channel.get_kodi_item() item.setProperty(self.propertyRetrospect, "true") item.setProperty(self.propertyRetrospectChannel, "true") if channel.settings: item.setProperty(self.propertyRetrospectChannelSetting, "true") if channel.adaptiveAddonSelectable: item.setProperty(self.propertyRetrospectAdaptive, "true") # Get the context menu items context_menu_items = self.__get_context_menu_items(channel) item.addContextMenuItems(context_menu_items) # Get the URL for the item url = self._create_action_url(channel, action=self.actionListFolder) # Append to the list of Kodi Items xbmc_items.append((url, item, True)) # Add the items ok = xbmcplugin.addDirectoryItems(self.handle, xbmc_items, len(xbmc_items)) # Just let Kodi display the order we give. xbmcplugin.addSortMethod( handle=self.handle, sortMethod=xbmcplugin.SORT_METHOD_UNSORTED) xbmcplugin.addSortMethod(handle=self.handle, sortMethod=xbmcplugin.SORT_METHOD_TITLE) xbmcplugin.addSortMethod(handle=self.handle, sortMethod=xbmcplugin.SORT_METHOD_GENRE) xbmcplugin.setContent(handle=self.handle, content="tvshows") xbmcplugin.endOfDirectory(self.handle, ok) except: xbmcplugin.endOfDirectory(self.handle, False) Logger.critical("Error fetching channels for plugin", exc_info=True)
def get_kodi_item(self, name=None): """Creates a Kodi item with the same data is the MediaItem. This item is used for displaying purposes only and changes to it will not be passed on to the MediaItem. :param str|unicode name: Overwrites the name of the Kodi item. :return: a complete Kodi ListItem :rtype: xbmcgui.ListItem """ # Update name and descriptions name_post_fix, description_post_fix = self.__update_title_and_description_with_limitations( ) name = self.__get_title(name) name = "%s%s" % (name, name_post_fix) name = self.__full_decode_text(name) if self.uses_external_addon: other = LanguageHelper.get_localized_string( LanguageHelper.OtherAddon) name = "{0} {1} [COLOR gold]{2}[/COLOR]".format( name, unichr(187), other) if self.description is None: self.description = '' description = "%s%s" % (self.description.lstrip(), description_post_fix) description = self.__full_decode_text(description) if description is None: description = "" # the Kodi ListItem date # date: string (%d.%m.%Y / 01.01.2009) - file date if self.__timestamp > datetime.datetime.min: kodi_date = self.__timestamp.strftime("%d.%m.%Y") kodi_year = self.__timestamp.year else: kodi_date = "" kodi_year = 0 # Get all the info labels starting with the ones set and then add the specific ones info_labels = self.__infoLabels.copy() info_labels["Title"] = name if kodi_date: info_labels["Date"] = kodi_date info_labels["Year"] = kodi_year if self.type != "audio": info_labels["Plot"] = description # now create the Kodi item item = xbmcgui.ListItem(name or "<unknown>", self.__date) item.setLabel(name) item.setLabel2(self.__date) # set a flag to indicate it is a item that can be used with setResolveUrl. if self.is_playable(): Logger.trace("Setting IsPlayable to True") item.setProperty("IsPlayable", "true") # specific items Logger.trace("Setting InfoLabels: %s", info_labels) if self.type == "audio": item.setInfo(type="music", infoLabels=info_labels) else: item.setInfo(type="video", infoLabels=info_labels) # now set all the art to prevent duplicate calls to Kodi if self.fanart and not AddonSettings.hide_fanart(): item.setArt({ 'thumb': self.thumb, 'icon': self.icon, 'fanart': self.fanart }) else: item.setArt({'thumb': self.thumb, 'icon': self.icon}) # Set Artwork # art = dict() # for l in ("thumb", "poster", "banner", "fanart", "clearart", "clearlogo", "landscape"): # art[l] = self.thumb # item.setArt(art) # We never set the content resolving, Retrospect does this. And if we do, then the custom # headers are removed from the URL when opening the resolved URL. try: item.setContentLookup(False) except: # apparently not yet supported on this Kodi version3 pass return item
def execute(self): if self.category: Logger.info("Plugin::show_channel_list for %s", self.category) else: Logger.info("Plugin::show_channel_list") try: # only display channels channel_register = ChannelIndex.get_register() channels = channel_register.get_channels() xbmc_items = [] # Should we show the "All Favourites"? if AddonSettings.show_show_favourites_in_channel_list(): icon = Config.icon fanart = Config.fanart poster = Config.poster name = LanguageHelper.get_localized_string( LanguageHelper.AllFavouritesId) description = LanguageHelper.get_localized_string( LanguageHelper.AllFavouritesDescriptionId) kodi_item = kodifactory.list_item(name, name) kodi_item.setInfo("video", {"Plot": description}) # set art try: kodi_item.setIconImage(icon) except: # it was deprecated pass kodi_item.setArt({ 'thumb': icon, 'icon': icon, 'poster': poster }) kodi_item.setProperty(self._propertyRetrospect, "true") kodi_item.setProperty(self._propertyRetrospectCategory, "true") if not AddonSettings.hide_fanart(): kodi_item.setArt({'fanart': fanart}) url = self.parameter_parser.create_action_url( None, action=action.ALL_FAVOURITES) xbmc_items.append((url, kodi_item, True)) for channel in channels: if self.category and channel.category != self.category: Logger.debug("Skipping %s (%s) due to category filter", channel.channelName, channel.category) continue # Get the Kodi item item = channel.get_kodi_item() item.setProperty(self._propertyRetrospect, "true") item.setProperty(self._propertyRetrospectChannel, "true") if channel.settings: item.setProperty(self._propertyRetrospectChannelSetting, "true") if channel.adaptiveAddonSelectable: item.setProperty(self._propertyRetrospectAdaptive, "true") # Get the context menu items context_menu_items = self._get_context_menu_items(channel) item.addContextMenuItems(context_menu_items) # Get the URL for the item url = self.parameter_parser.create_action_url( channel, action=action.LIST_FOLDER) # Append to the list of Kodi Items xbmc_items.append((url, item, True)) # Add the items ok = xbmcplugin.addDirectoryItems(self.handle, xbmc_items, len(xbmc_items)) # Just let Kodi display the order we give. xbmcplugin.addSortMethod( handle=self.handle, sortMethod=xbmcplugin.SORT_METHOD_UNSORTED) xbmcplugin.addSortMethod(handle=self.handle, sortMethod=xbmcplugin.SORT_METHOD_TITLE) xbmcplugin.addSortMethod(handle=self.handle, sortMethod=xbmcplugin.SORT_METHOD_GENRE) xbmcplugin.setContent(handle=self.handle, content="tvshows") xbmcplugin.endOfDirectory(self.handle, ok) except: xbmcplugin.endOfDirectory(self.handle, False) Logger.critical("Error fetching channels for plugin", exc_info=True)
def get_kodi_item(self, name=None): """Creates a Kodi item with the same data is the MediaItem. This item is used for displaying purposes only and changes to it will not be passed on to the MediaItem. :param str|unicode name: Overwrites the name of the Kodi item. :return: a complete Kodi ListItem :rtype: xbmcgui.ListItem """ # Update name and descriptions name_post_fix, description_pre_fix = self.__update_title_and_description_with_limitations( ) name = self.__get_title(name) name = "%s %s" % (name, name_post_fix) name = self.__full_decode_text(name) if self.description is None: self.description = '' if description_pre_fix != "": description = "%s\n\n%s" % (description_pre_fix, self.description) else: description = self.description description = self.__full_decode_text(description) if description is None: description = "" # the Kodi ListItem date # date: string (%d.%m.%Y / 01.01.2009) - file date if self.__timestamp > datetime.min: kodi_date = self.__timestamp.strftime("%d.%m.%Y") kodi_year = self.__timestamp.year else: kodi_date = "" kodi_year = 0 # Get all the info labels starting with the ones set and then add the specific ones info_labels = self.__infoLabels.copy() info_labels["Title"] = name if kodi_date: info_labels["Date"] = kodi_date info_labels["Year"] = kodi_year info_labels["Aired"] = kodi_date if self.type != "audio": info_labels["Plot"] = description if self.tv_show_title: info_labels["TVShowTitle"] = self.tv_show_title # now create the Kodi item item = kodifactory.list_item(name or "<unknown>", self.__date) item.setLabel(name) item.setLabel2(self.__date) # set a flag to indicate it is a item that can be used with setResolveUrl. if self.is_playable(): Logger.trace("Setting IsPlayable to True") item.setProperty("IsPlayable", "true") # specific items Logger.trace("Setting InfoLabels: %s", info_labels) if self.type == "audio": item.setInfo(type="music", infoLabels=info_labels) else: item.setInfo(type="video", infoLabels=info_labels) # now set all the art to prevent duplicate calls to Kodi art = {'thumb': self.thumb, 'icon': self.icon, 'landscape': self.thumb} if self.fanart and not AddonSettings.hide_fanart(): art['fanart'] = self.fanart if self.poster: art['poster'] = self.poster item.setArt(art) # We never set the content resolving, Retrospect does this. And if we do, then the custom # headers are removed from the URL when opening the resolved URL. try: item.setContentLookup(False) except: # apparently not yet supported on this Kodi version3 pass return item