def _createItem(self, teaser): settings = self.settings item = None genre = '' sep = '' if teaser.genre: genre += sep + teaser.genre sep = ' | ' if teaser.category: genre += sep + teaser.category title = teaser.title #self.log.info("settings.mergeCategoryAndTitle: {} - cat: {}, title: {}, starts: {}.", self.settings.mergeCategoryAndTitle, teaser.category, title, title.startswith(teaser.category)) if settings.mergeCategoryAndTitle and settings.showGenreInTitle: if teaser.category is not None and title.startswith(teaser.category): title = title[len(teaser.category):].strip() #self.log.info("settings.mergeCategoryAndTitle: {} - cat: {}, title: {}, starts: {}.", settings.mergeCategoryAndTitle, teaser.category, title, title.startswith(teaser.category)) if teaser.label is not None and teaser.label != "" and settings.showTagsInTitle: label = teaser.label if teaser.type is not None: label = teaser.type.capitalize() + ": " + label title = '[' + label + '] ' + title title.strip() if teaser.playable and settings.showPlayableInTitle: title = '(>) ' + title if genre is not None and genre != "" and settings.showGenreInTitle: title = '[' + genre + '] ' + title title = title.strip() if teaser.date is not None and settings.showDateInTitle: title = teaser.date + " " + title isFolder = False #self.log.info("_createItem: title='{}' contentName='{}' playable='{}'", title, teaser.contentName, teaser.playable) if teaser.contentName is not None and teaser.playable: params = {'contentName': teaser.contentName, 'title': title} if teaser.apiToken is not None: params['apiToken'] = teaser.apiToken if teaser.url is not None: params['videoUrl'] = teaser.url if teaser.date is not None: params['date'] = teaser.date if teaser.duration is not None: params['duration'] = teaser.duration if genre is not None: params['genre'] = genre action = Action(pagelet='PlayVideo', params=params) isFolder = False else: action = Action(pagelet='RubricPage', params={'rubricUrl': teaser.url}) self.info("redirecting to rubric-url '{}' and teaser-title '{}' ...", teaser.url, title) isFolder = True #return None item = Item(title, action, teaser.image, teaser.text, genre, teaser.date, teaser.duration, isFolder, teaser.playable) return item
def service(self, request, response): apiToken = request.getParam('apiToken') response.addFolder(self._(32030), Action('SearchHistoryPage', {'apiToken': apiToken})) response.addFolder( self._(32001), Action('SearchPage', { 'apiToken': apiToken, 'contentTypes': 'episode' })) response.addFolder(self._(32002), Action('SearchPage', {'apiToken': apiToken}))
def _sendMessage(self, level, caption, message, action=Action()): dialog = xbmcgui.Dialog() dialog.notification(caption, message, level) url = self.encodeUrl(action) self.context.log.info("[Response] - send{} '{}', redirecting to '{}'", caption, message, url) listItem = xbmcgui.ListItem() xbmcplugin.setResolvedUrl(self.handle, False, listItem)
def service(self, request, response): configuration = ConfigurationResource(Constants.configUrl) self._parse(configuration) apiToken = configuration.apiToken response.addFolder(self._(32005), Action('SearchMenuPage', {'apiToken': apiToken})) response.addFolder(self._(32003), Action('RubricsPage', {'apiToken': apiToken})) response.addFolder( self._(32031), Action('RubricPage', { 'apiToken': apiToken, 'rubricUrl': '/bestbewertet' })) response.addFolder( self._(32032), Action('RubricPage', { 'apiToken': apiToken, 'rubricUrl': '/meist-gesehen' })) response.addFolder(self._(32037), Action('ShowsAzPage', {'apiToken': apiToken})) #response.addFolder(self._(32034), Action('RubricPage', {'apiToken': apiToken, 'rubricUrl': '/barrierefreiheit-im-zdf'})) response.addFolder( self._(32036), Action('RubricPage', { 'apiToken': apiToken, 'rubricUrl': '/sendung-verpasst' })) response.addFolder(self._(32035), Action('LiveTvPage', {'apiToken': apiToken}))
def service(self, request, response): navigation = NavigationResource(Constants.baseUrl) self._parse(navigation) for rubric in navigation.rubrics: if self._isExcluded(rubric): continue response.addFolder(str(self._(32004)) + ' - ' + rubric.title, Action('RubricPage', {'rubricUrl': rubric.url}))
def service(self, request, response): entries = self.searchHistory.getEntries() for entry in entries: params = {'q': entry.query} if entry.contentTypes is not None: params['contentTypes'] = entry.contentTypes response.addFolder(self._(32029, entry.date, entry.query), Action('SearchPage', params), date=entry.date)
def service(self, request, response): rubricBaseUrl = Constants.showsAzUrl + '?group=' groups = [] for i in range (0, 26): group = chr(ord('a') + i) groups.append(group) groups.append('0 - 9') for group in groups: url = rubricBaseUrl + group.replace(' ', '+') response.addFolder(self._(32038, group.upper()), Action('RubricPage', {'rubricUrl': url}))
def _renderClusters(self, clusters, response, rubricUrl): for cluster in clusters: clusterTitle = cluster.title #.encode('ascii', 'ignore') action = Action(pagelet='RubricPage', params={ 'rubricUrl': rubricUrl, 'listType': cluster.listType, 'listStart': str(cluster.listStart), 'listEnd': str(cluster.listEnd) }) item = Item(cluster.title, action, cluster.image, isFolder=True) response.addItem(item)
def _getMoreAction(self, moreUrl, pages, page): i = moreUrl.find('?') if i != -1: moreQuery = moreUrl[i + 1:] moreQuery = moreQuery.replace('=', '=') moreQuery = moreQuery.replace('&', '&') searchArgs = urlparse.parse_qs(moreQuery) for key, value in searchArgs.iteritems(): searchArgs[key] = value[0] searchArgs['pages'] = pages searchArgs['page'] = page moreAction = Action('SearchPage', searchArgs) return moreAction
def service(self, request, response): apiToken = request.getParam('apiToken') rubricBaseUrl = '/sendungen-a-z?group=' groups = [] for i in range(0, 26): group = chr(ord('a') + i) groups.append(group) groups.append('0 - 9') for group in groups: url = rubricBaseUrl + group.replace(' ', '+') response.addFolder( self._(32038, group.upper()), Action('RubricPage', { 'apiToken': apiToken, 'rubricUrl': url }))
def service(self, request, response): response.addFolder(self._(32005), Action('SearchMenuPage')) response.addFolder(self._(32003), Action('RubricsPage')) response.addFolder(self._(32043), Action('RubricPage', {'rubricUrl': '/'})) response.addFolder( self._(32031), Action('RubricPage', {'rubricUrl': '/bestbewertet'})) response.addFolder( self._(32032), Action('RubricPage', {'rubricUrl': '/meist-gesehen'})) response.addFolder(self._(32037), Action('ShowsAzPage')) #response.addFolder(self._(32034), Action('RubricPage', {'rubricUrl': '/barrierefreiheit-im-zdf'})) response.addFolder( self._(32036), Action('RubricPage', {'rubricUrl': '/sendung-verpasst'})) response.addFolder(self._(32035), Action('LiveTvPage'))
def service(self, request, response): contentName = request.getParam('contentName') title = request.getParam('title') videoUrl = request.getParam('videoUrl') date = request.getParam('date') genre = request.getParam('genre') # get api-token handling parameters self.videoUrl = request.getParam('videoUrl') self.apiToken = request.getParam('apiToken') if self.apiToken is None: self.apiToken = self.tokenCache.getApiToken() if self.apiToken is None: self._refreshApiToken() item = None if contentName is not None: try: dialog = xbmcgui.DialogProgressBG() dialog.create(self._(32007), self._(32008)) videoContentUrl = Constants.apiContentUrl + contentName + '.json?profile=player2' self.debug("downloading video-content-url '{1}' ...", videoContentUrl) videoContent = self._getVideoContent(videoContentUrl) if videoContent.streamInfoUrl is None: self.warn("can't find stream-info-url in video-content '{1}' in content '{2}'", contentName, videoContent.content) response.sendError(self._(32011) + " '" + contentName +"'", Action('SearchPage')) return dialog.update(percent=50, message=self._(32009)) self.debug("downloading stream-info-url '{1}' ...", videoContent.streamInfoUrl) streamInfo = self._getStreamInfo(videoContent.streamInfoUrl) url = streamInfo.streamUrl if url is None: self.warn("can't find stream-url in stream-info-url '{1}' in content '{2}'", videoContent.streamInfoUrl, streamInfo.content) response.sendError(self._(32012) + " '" + contentName +"'", Action('SearchPage')) return title = videoContent.title text = videoContent.text infoLabels = {} infoLabels['title'] = title infoLabels['sorttitle'] = title infoLabels['genre'] = genre #infoLabels['plot'] = text #infoLabels['plotoutline'] = text infoLabels['tvshowtitle'] = title infoLabels['tagline'] = text if videoContent.duration is not None: infoLabels['duration'] = videoContent.duration infoLabels['mediatype'] = 'video' if date is not None and date != "": infoLabels['date'] = date item = xbmcgui.ListItem(title, text) item.setPath(url) item.setInfo(type="Video", infoLabels=infoLabels) image = videoContent.image if image is not None: item.setArt({'poster': image, 'banner': image, 'thumb': image, 'icon': image, 'fanart': image}) # set subtitles self._setSubTitles(item, streamInfo.subTitlesUrl) dialog.update(percent=90, message=self._(32010)) self.info("setting resolved url='{1}' ...", url) xbmcplugin.setResolvedUrl(response.handle, True, item) finally: dialog.close();
def service(self, request, response): response.addFolder(self._(32030), Action('SearchHistoryPage')) response.addFolder(self._(32001), Action('SearchPage', {'contentTypes':'episode'})) response.addFolder(self._(32002), Action('SearchPage'))
def sendInfo(self, message, action=Action()): self._sendMessage(xbmcgui.NOTIFICATION_INFO, self.context._(32040), message, action)
def sendError(self, message, action=Action()): self._sendMessage(xbmcgui.NOTIFICATION_ERROR, self.context._(32039), message, action)