def actionDialogCallback(self, obj, action): airing = obj changes = {} if action: if action == 'watch': player.PLAYER.playAiringChannel(airing.gridAiring) elif action == 'record': airing.schedule() self.grid.updateChannelAiringData( path=airing.gridAiring.channel['path']) elif action == 'unschedule': airing.schedule(False) self.grid.updateChannelAiringData( path=airing.gridAiring.channel['path']) self.updateGridItem(airing, self.getFocusId()) if airing.gridAiring.ended(): secs = airing.gridAiring.secondsSinceEnd() changes['start'] = T(32144).format(util.durationToText(secs)) else: self.setDialogButtons(airing, changes) secs = airing.gridAiring.secondsToStart() if secs < 1: start = T(32145).format(util.durationToText(secs * -1)) else: start = T(32146).format(util.durationToText(secs)) changes['start'] = start return changes
def actionDialogCallback(self, obj, action): airing = obj changes = {} if action: if action == 'watch': player.PLAYER.playAiringChannel(airing.gridAiring) elif action == 'record': airing.schedule() self.grid.updateChannelAiringData(path=airing.gridAiring.channel['path']) elif action == 'unschedule': airing.schedule(False) self.grid.updateChannelAiringData(path=airing.gridAiring.channel['path']) self.updateGridItem(airing, self.getFocusId()) if airing.gridAiring.ended(): secs = airing.gridAiring.secondsSinceEnd() changes['start'] = T(32144).format(util.durationToText(secs)) else: self.setDialogButtons(airing, changes) secs = airing.gridAiring.secondsToStart() if secs < 1: start = T(32145).format(util.durationToText(secs * -1)) else: start = T(32146).format(util.durationToText(secs)) changes['start'] = start return changes
def updateSelectedDetails(self): airing = self.getSelectedAiring() if not airing: return self.setProperty('background', airing.background) self.setProperty('thumb', airing.thumb) self.setProperty('title', airing.title) self.setProperty('info', airing.data.get('title', '')) if airing.type == 'movie' and airing.quality_rating: info = [] if airing.film_rating: info.append(airing.film_rating.upper()) if airing.release_year: info.append(str(airing.release_year)) self.setProperty('info', u' / '.join(info) + u' /') self.setProperty('stars', str(airing.quality_rating / 2)) self.setProperty('half.star', str(airing.quality_rating % 2)) else: self.setProperty('stars', '0') self.setProperty('half.star', '') if airing.type == 'series': info = [] if airing.data.get('title'): info.append(airing.data.get('title')) if airing.data.get('season_number'): info.append(T(32155).format(airing.data['season_number'])) if airing.data.get('episode_number'): info.append(T(32158).format(airing.data['episode_number'])) self.setProperty('info', u' / '.join(info)) if airing.ended(): secs = airing.secondsSinceEnd() start = T(32144).format(util.durationToText(secs)) else: secs = airing.secondsToStart() if secs < 1: start = T(32145).format(util.durationToText(secs * -1)) else: start = T(32146).format(util.durationToText(secs)) if airing.conflicted: self.setProperty('indicator', 'indicators/conflict_pill_hd.png') elif airing.scheduled: self.setProperty('indicator', 'indicators/rec_pill_hd.png') else: self.setProperty('indicator', '') self.setProperty('start', start)
def updateSelectedDetails(self): airing = self.getSelectedAiring() if not airing: return self.setProperty('background', airing.background) self.setProperty('thumb', airing.thumb) self.setProperty('title', airing.title) self.setProperty('info', airing.data.get('title', '')) if airing.type == 'movie' and airing.quality_rating: info = [] if airing.film_rating: info.append(airing.film_rating.upper()) if airing.release_year: info.append(str(airing.release_year)) self.setProperty('info', u' / '.join(info) + u' /') self.setProperty('stars', str(airing.quality_rating / 2)) self.setProperty('half.star', str(airing.quality_rating % 2)) else: self.setProperty('stars', '0') self.setProperty('half.star', '') if airing.type == 'series': info = [] if airing.data.get('title'): info.append(airing.data.get('title')) if airing.data.get('season_number'): info.append(T(32155).format(airing.data['season_number'])) if airing.data.get('episode_number'): info.append(T(32158).format(airing.data['episode_number'])) self.setProperty('info', u' / '.join(info)) if airing.ended(): secs = airing.secondsSinceEnd() start = T(32144).format(util.durationToText(secs)) else: secs = airing.secondsToStart() if secs < 1: start = T(32145).format(util.durationToText(secs * -1)) else: start = T(32146).format(util.durationToText(secs)) if airing.conflicted: self.setProperty('indicator', 'indicators/conflict_pill_hd.png') elif airing.scheduled: self.setProperty('indicator', 'indicators/rec_pill_hd.png') else: self.setProperty('indicator', '') self.setProperty('start', start)
def airingClicked(self, airing): # while not airing and backgroundthread.BGThreader.working() and not xbmc.abortRequested: # xbmc.sleep(100) # airing = item.dataSource.get('airing') try: info = T(32143).format(airing.gridAiring.displayChannel(), airing.gridAiring.network, airing.gridAiring.displayDay(), airing.gridAiring.displayTimeStart(), airing.gridAiring.displayTimeEnd()) except tablo.ConnectionError: xbmcgui.Dialog().ok(T(32161), T(32157).format(tablo.API.device.displayName)) return kwargs = { 'number': airing.gridAiring.number, 'background': airing.background, 'callback': self.actionDialogCallback, 'obj': airing, 'start_indicator1': 'new' in airing.qualifiers and 'indicators/qualifier_new_hd.png' or '', 'start_indicator2': 'live' in airing.qualifiers and 'indicators/qualifier_live_hd.png' or '' } self.setDialogButtons(airing, kwargs) if airing.type == 'movie': try: show = airing.gridAiring.getShow() description = show.plot or show.description except: util.ERROR() description = '' else: description = airing.gridAiring.description secs = airing.gridAiring.secondsToStart() if secs < 1: start = T(32145).format(util.durationToText(secs * -1)) else: start = T(32146).format(util.durationToText(secs)) actiondialog.openDialog(airing.title, info, description, start, **kwargs)
def airingClicked(self, airing): # while not airing and backgroundthread.BGThreader.working() and not xbmc.abortRequested: # xbmc.sleep(100) # airing = item.dataSource.get('airing') try: info = T(32143).format( airing.gridAiring.displayChannel(), airing.gridAiring.network, airing.gridAiring.displayDay(), airing.gridAiring.displayTimeStart(), airing.gridAiring.displayTimeEnd() ) except tablo.ConnectionError: xbmcgui.Dialog().ok(T(32161), T(32157).format(tablo.API.device.displayName)) return kwargs = { 'number': airing.gridAiring.number, 'background': airing.background, 'callback': self.actionDialogCallback, 'obj': airing, 'start_indicator1': 'new' in airing.qualifiers and 'indicators/qualifier_new_hd.png' or '', 'start_indicator2': 'live' in airing.qualifiers and 'indicators/qualifier_live_hd.png' or '' } self.setDialogButtons(airing, kwargs) if airing.type == 'movie': try: show = airing.gridAiring.getShow() description = show.plot or show.description except: util.ERROR() description = '' else: description = airing.gridAiring.description secs = airing.gridAiring.secondsToStart() if secs < 1: start = T(32145).format(util.durationToText(secs * -1)) else: start = T(32146).format(util.durationToText(secs)) actiondialog.openDialog( airing.title, info, description, start, **kwargs )
def chunkCallback(self, items, start): with self.lock: pos = start self.setBackground(items) thumbDim = TYPE_KEYS.get(self.section.type, TYPE_KEYS['movie'])['thumb_dim'] artDim = TYPE_KEYS.get(self.section.type, TYPE_KEYS['movie']).get( 'art_dim', (256, 256)) showUnwatched = self.section.TYPE in ('movie', 'show') and True or False for obj in items: mli = self.showPanelControl[pos] mli.setLabel(obj.defaultTitle or '') mli.setThumbnailImage( obj.defaultThumb.asTranscodedImageURL(*thumbDim)) mli.dataSource = obj mli.setProperty('summary', obj.get('summary')) if showUnwatched: mli.setLabel2(util.durationToText(obj.fixedDuration())) mli.setProperty( 'art', obj.defaultArt.asTranscodedImageURL(*artDim)) if not obj.isWatched: if self.section.TYPE == 'show': mli.setProperty('unwatched.count', str(obj.unViewedLeafCount)) else: mli.setProperty('unwatched', '1') pos += 1
def updateAiringItem(self, airing): item = self.getAiringItem(airing) item.dataSource['airing'] = airing show = self._show or airing.getShow() self.setProperty('busy', '') if airing.type == 'schedule': label = show.title else: label = airing.title if not label: label = T(32147).format(airing.displayChannel(), airing.network, airing.displayTimeStart(), airing.displayTimeEnd()) item.setLabel(label) item.setLabel2(airing.displayDay()) item.setThumbnailImage(show.thumb) item.setProperty('show.title', show.title) if airing.recording(): item.setProperty('duration', T(32169)) else: item.setProperty( 'duration', util.durationToText(airing.data['video_details']['duration'])) self.updateItemIndicators(item)
def updateProperties(self): self.setProperty('title', self.mediaItem.title) self.setProperty('summary', self.mediaItem.summary) self.setProperty('thumb', self.mediaItem.defaultThumb.asTranscodedImageURL(*self.THUMB_DIMS[self.mediaItem.type]['main.thumb'])) self.setProperty( 'background', self.mediaItem.art.asTranscodedImageURL(self.width, self.height, blur=128, opacity=60, background=colors.noAlpha.Background) ) self.setProperty('duration', util.durationToText(self.mediaItem.fixedDuration())) self.setProperty('info', '') self.setProperty('date', self.mediaItem.year) self.setProperty('extras.header', T(32305, 'Extras')) self.setProperty('related.header', T(32306, 'Related Shows')) if self.mediaItem.creator: self.setProperty('directors', u'{0} {1}'.format(T(32418, 'Creator').upper(), self.mediaItem.creator)) elif self.mediaItem.studio: self.setProperty('directors', u'{0} {1}'.format(T(32386, 'Studio').upper(), self.mediaItem.studio)) cast = u' / '.join([r.tag for r in self.mediaItem.roles()][:5]) castLabel = T(32419, 'Cast').upper() self.setProperty('writers', cast and u'{0} {1}'.format(castLabel, cast) or '') genres = self.mediaItem.genres() self.setProperty('info', genres and (u' / '.join([g.tag for g in genres][:3])) or '') self.setProperties(('rating.stars', 'rating', 'rating.image', 'rating2', 'rating2.image'), '') if self.mediaItem.userRating: stars = str(int(round((self.mediaItem.userRating.asFloat() / 10) * 5))) self.setProperty('rating.stars', stars) if self.mediaItem.ratingImage: rating = self.mediaItem.rating audienceRating = self.mediaItem.audienceRating if self.mediaItem.ratingImage.startswith('rottentomatoes:'): rating = '{0}%'.format(int(rating.asFloat() * 10)) if audienceRating: audienceRating = '{0}%'.format(int(audienceRating.asFloat() * 10)) self.setProperty('rating', rating) self.setProperty('rating.image', 'script.plex/ratings/{0}.png'.format(self.mediaItem.ratingImage.replace('://', '/'))) if self.mediaItem.audienceRatingImage: self.setProperty('rating2', audienceRating) self.setProperty('rating2.image', 'script.plex/ratings/{0}.png'.format(self.mediaItem.audienceRatingImage.replace('://', '/'))) else: self.setProperty('rating', self.mediaItem.rating) sas = self.mediaItem.selectedAudioStream() self.setProperty('audio', sas and sas.getTitle() or 'None') sss = self.mediaItem.selectedSubtitleStream() self.setProperty('subtitles', sss and sss.getTitle() or 'None') leafcount = self.mediaItem.leafCount.asFloat() if leafcount: width = (int((self.mediaItem.viewedLeafCount.asInt() / leafcount) * self.width)) or 1 self.progressImageControl.setWidth(width)
def setDialogIndicators(self, airing, show, arg_dict): if airing.type == 'schedule': description = show.description or '' else: description = airing.description or '' failed = airing.data['video_details']['state'] == 'failed' if failed: msg = RECORDING_FAILED_MESSAGES.get( airing.data['video_details']['error']['details'], RECORDING_FAILED_MESSAGES.get(None)) description += u'[CR][CR][COLOR FFC81010]{0}[/COLOR]'.format(msg) else: if airing.watched: arg_dict['indicator'] = '' else: if airing.data['user_info']['position']: arg_dict['indicator'] = 'indicators/seen_partial_hd.png' else: arg_dict['indicator'] = 'indicators/seen_unwatched_hd.png' if airing.data['user_info']['position'] and not airing.recording(): left = airing.data['video_details']['duration'] - airing.data[ 'user_info']['position'] total = airing.data['video_details']['duration'] description += u'[CR][CR]{0}'.format(T(32168)).format( util.durationToText(left), util.durationToText(total)) arg_dict['seenratio'] = airing.data['user_info'][ 'position'] / float(total) arg_dict['seen'] = airing.data['user_info']['position'] else: if airing.recording(): description += u'[CR][CR]{1}'.format(T(32169)) if airing.data['user_info']['position']: arg_dict['seen'] = airing.data['user_info']['position'] else: description += '[CR][CR]{0}: {1}'.format( T(32170), util.durationToText( airing.data['video_details']['duration'])) arg_dict['seen'] = None arg_dict['seenratio'] = None arg_dict['plot'] = description
def setProperties(self): self.setProperty( 'background', self.playlist.composite.asTranscodedImageURL(self.width, self.height, blur=128, opacity=60, background=colors.noAlpha.Background) ) self.setProperty('playlist.thumb', self.playlist.composite.asTranscodedImageURL(*self.ALBUM_THUMB_DIM)) self.setProperty('playlist.title', self.playlist.title) self.setProperty('playlist.duration', util.durationToText(self.playlist.duration.asInt()))
def actionDialogCallback(self, obj, action): airing = obj changes = {} if action: if action == 'CHANGE.ITEM': return self.updateActionDialog(obj) elif action == 'watch': player.PLAYER.playAiringChannel(airing.gridAiring or airing) elif action == 'record': self.modified = True airing.schedule() self._show.update() grid.addPending(airing=airing) elif action == 'unschedule': self.modified = True airing.schedule(False) self._show.update() grid.addPending(airing=airing) self.setDialogButtons(airing, changes) if airing.ended(): secs = airing.secondsSinceEnd() changes['start'] = T(32144).format(util.durationToText(secs)) changes['button1'] = None changes['button2'] = None else: secs = airing.secondsToStart() if secs < 1: start = T(32145).format(util.durationToText(secs * -1)) else: start = T(32146).format(util.durationToText(secs)) changes['start'] = start return changes
def actionDialogCallback(self, obj, action): airing = obj changes = {} if action: if action == 'CHANGE.ITEM': return self.updateActionDialog(obj) elif action == 'watch': player.PLAYER.playAiringChannel(airing.gridAiring or airing) elif action == 'record': self.modified = True airing.schedule() self._show.update() grid.addPending(airing=airing) elif action == 'unschedule': self.modified = True airing.schedule(False) self._show.update() grid.addPending(airing=airing) self.setDialogButtons(airing, changes) if airing.ended(): secs = airing.secondsSinceEnd() changes['start'] = T(32144).format(util.durationToText(secs)) changes['button1'] = None changes['button2'] = None else: secs = airing.secondsToStart() if secs < 1: start = T(32145).format(util.durationToText(secs * -1)) else: start = T(32146).format(util.durationToText(secs)) changes['start'] = start return changes
def createPlaylistListItem(self, obj, wide=False): if obj.playlistType == 'audio': w, h = self.THUMB_SQUARE_DIM thumb = obj.buildComposite(width=w, height=h, media='thumb') else: w, h = self.THUMB_AR16X9_DIM thumb = obj.buildComposite(width=w, height=h, media='art') mli = kodigui.ManagedListItem( obj.title or '', util.durationToText(obj.duration.asInt()), # thumbnailImage=obj.composite.asTranscodedImageURL(*self.THUMB_DIMS[obj.playlistType]['item.thumb']), thumbnailImage=thumb, data_source=obj ) mli.setProperty('thumb.fallback', 'script.plex/thumb_fallbacks/{0}.png'.format(obj.playlistType == 'audio' and 'music' or 'movie')) return mli
def createListItem(self, episode): if episode.index: subtitle = u'{0}{1} \u2022 {2}{3}'.format(T(32310, 'S'), episode.parentIndex, T(32311, 'E'), episode.index) else: subtitle = episode.originallyAvailableAt.asDatetime('%m/%d/%y') mli = kodigui.ManagedListItem( episode.title, subtitle, thumbnailImage=episode.thumb.asTranscodedImageURL(*self.THUMB_AR16X9_DIM), data_source=episode ) mli.setProperty('thumb.fallback', 'script.plex/thumb_fallbacks/show.png') mli.setProperty('episode.number', str(episode.index) or '') mli.setProperty('episode.duration', util.durationToText(episode.duration.asInt())) mli.setProperty('unwatched', not episode.isWatched and '1' or '') # mli.setProperty('progress', util.getProgressImage(obj)) return mli
def setItemInfo(self, video, mli): # video.reload(checkFiles=1) mli.setProperty('background', video.art.asTranscodedImageURL(self.width, self.height, blur=128, opacity=60, background=colors.noAlpha.Background)) mli.setProperty('title', video.title) mli.setProperty('show.title', video.grandparentTitle or (self.show_.title if self.show_ else '')) mli.setProperty('duration', util.durationToText(video.duration.asInt())) mli.setProperty('summary', video.summary.strip().replace('\t', ' ')) if video.index: mli.setProperty('season', u'{0} {1}'.format(T(32303, 'Season'), video.parentIndex)) mli.setProperty('episode', u'{0} {1}'.format(T(32304, 'Episode'), video.index)) else: mli.setProperty('season', '') mli.setProperty('episode', '') mli.setProperty('date', util.cleanLeadingZeros(video.originallyAvailableAt.asDatetime('%B %d, %Y'))) # mli.setProperty('related.header', 'Related Shows') mli.setProperty('year', video.year) mli.setProperty('content.rating', video.contentRating.split('/', 1)[-1]) mli.setProperty('genre', self.genre) if video.get('userRating'): stars = str(int(round((video.userRating.asFloat() / 10) * 5))) mli.setProperty('rating.stars', stars) # elif video.rating: # stars = str(int(round((video.rating.asFloat() / 10) * 5))) # mli.setProperty('rating.stars', stars) if video.get('ratingImage'): rating = video.rating audienceRating = video.audienceRating if video.ratingImage.startswith('rottentomatoes:'): rating = '{0}%'.format(int(rating.asFloat() * 10)) if audienceRating: audienceRating = '{0}%'.format(int(audienceRating.asFloat() * 10)) mli.setProperty('rating', rating) mli.setProperty('rating.image', 'script.plex/ratings/{0}.png'.format(video.ratingImage.replace('://', '/'))) if video.get('audienceRatingImage'): mli.setProperty('rating2', audienceRating) mli.setProperty('rating2.image', 'script.plex/ratings/{0}.png'.format(video.audienceRatingImage.replace('://', '/'))) else: mli.setProperty('rating', video.rating)
def setInfo(self): if self.next: self.setProperty( 'post.play.background', self.next.art.asTranscodedImageURL( self.width, self.height, blur=128, opacity=60, background=colors.noAlpha.Background)) self.setProperty('info.title', self.next.title) self.setProperty('info.duration', util.durationToText(self.next.duration.asInt())) self.setProperty('info.summary', self.next.summary) if self.prev: self.setProperty( 'post.play.background', self.prev.art.asTranscodedImageURL( self.width, self.height, blur=128, opacity=60, background=colors.noAlpha.Background)) self.setProperty('prev.info.title', self.prev.title) self.setProperty('prev.info.duration', util.durationToText(self.prev.duration.asInt())) self.setProperty('prev.info.summary', self.prev.summary) if self.prev.type == 'episode': if self.next: self.setProperty( 'next.thumb', self.next.thumb.asTranscodedImageURL(*self.NEXT_DIM)) self.setProperty('related.header', T(32306, 'Related Shows')) self.setProperty( 'info.date', util.cleanLeadingZeros( self.next.originallyAvailableAt.asDatetime( '%B %d, %Y'))) self.setProperty('next.title', self.next.grandparentTitle) self.setProperty( 'next.subtitle', u'{0} {1} \u2022 {2} {3}'.format(T(32303, 'Season'), self.next.parentIndex, T(32304, 'Episode'), self.next.index)) if self.prev: self.setProperty( 'prev.thumb', self.prev.thumb.asTranscodedImageURL(*self.PREV_DIM)) self.setProperty('prev.title', self.prev.grandparentTitle) self.setProperty( 'prev.subtitle', u'{0} {1} \u2022 {2} {3}'.format(T(32303, 'Season'), self.prev.parentIndex, T(32304, 'Episode'), self.prev.index)) self.setProperty( 'prev.info.date', util.cleanLeadingZeros( self.prev.originallyAvailableAt.asDatetime( '%B %d, %Y'))) elif self.prev.type == 'movie': if self.next: self.setProperty( 'next.thumb', self.next.defaultArt.asTranscodedImageURL(*self.NEXT_DIM)) self.setProperty('related.header', T(32404, 'Related Movies')) self.setProperty('info.date', self.next.year) self.setProperty('next.title', self.next.title) self.setProperty('next.subtitle', self.next.year) if self.prev: self.setProperty( 'prev.thumb', self.prev.defaultArt.asTranscodedImageURL(*self.PREV_DIM)) self.setProperty('prev.title', self.prev.title) self.setProperty('prev.subtitle', self.prev.year) self.setProperty('prev.info.date', self.prev.year)
def onClick(self, controlID): if controlID == self.WATCH_BUTTON_ID: if self.seen: self.setProperty( 'dialog.message', T(32190).format(util.durationToText(self.seen))) self.setProperty('dialog.top.color', '52FFFFFF') self.setProperty('dialog.top', T(32191)) self.setProperty('dialog.bottom', T(32192)) self.parentAction = 'watch' self.setFocusId(self.DIALOG_GROUP_ID) return else: self.action = 'watch' elif controlID == self.DIALOG_TOP_BUTTON_ID: if self.parentAction == 'watch': self.action = 'watch' elif self.parentAction == 'delete': self.action = 'delete' self.setProperty('delete.busy', '1') try: if not self.doCallback(): self.doClose() finally: self.setProperty('delete.busy', '') self.parentAction = '' return self.parentAction = '' elif controlID == self.DIALOG_BOTTOM_BUTTON_ID: if self.parentAction == 'watch': self.action = 'resume' else: self.parentAction = '' return self.parentAction = '' elif controlID == self.TOGGLE_BUTTON_ID: self.action = 'toggle' self.setProperty('button2.busy', '1') try: if not self.doCallback(): self.doClose() finally: self.setProperty('button2.busy', '') return elif controlID == self.PROTECT_BUTTON_ID: self.action = 'protect' self.setProperty('button3.busy', '1') try: if not self.doCallback(): self.doClose() finally: self.setProperty('button3.busy', '') return elif controlID == self.DELETE_BUTTON_ID: self.setProperty( 'dialog.message', T(32193).format( util.LOCALIZED_RECORDING_TYPES[self._show.type].lower())) self.setProperty('dialog.top.color', '52FF0000') self.setProperty('dialog.top', T(32194)) self.setProperty('dialog.bottom', T(32149)) self.parentAction = 'delete' return if not self.doCallback(): self.doClose()
def setInfo(self): self.setProperty( 'background', self.video.art.asTranscodedImageURL( self.width, self.height, blur=128, opacity=60, background=colors.noAlpha.Background)) self.setProperty('title', self.video.title) self.setProperty('duration', util.durationToText(self.video.duration.asInt())) self.setProperty('summary', self.video.summary.strip().replace('\t', ' ')) directors = u' / '.join([d.tag for d in self.video.directors()][:5]) directorsLabel = len(self.video.directors) > 1 and T( 32401, u'DIRECTORS').upper() or T(32383, u'DIRECTOR').upper() self.setProperty( 'directors', directors and u'{0} {1}'.format(directorsLabel, directors) or '') if self.video.type == 'episode': self.setProperty('content.rating', '') self.setProperty( 'thumb', self.video.defaultThumb.asTranscodedImageURL( *self.THUMB_POSTER_DIM)) self.setProperty( 'preview', self.video.thumb.asTranscodedImageURL(*self.PREVIEW_DIM)) self.setProperty( 'info', u'{0} {1} {2} {3}'.format(T(32303, 'Season'), self.video.parentIndex, T(32304, 'Episode'), self.video.index)) self.setProperty( 'date', util.cleanLeadingZeros( self.video.originallyAvailableAt.asDatetime('%B %d, %Y'))) writers = u' / '.join([w.tag for w in self.video.writers()][:5]) writersLabel = len(self.video.writers) > 1 and T( 32403, u'WRITERS').upper() or T(32402, u'WRITER').upper() self.setProperty( 'writers', writers and u'{0} {1}'.format(writersLabel, writers) or '') self.setProperty('related.header', T(32306, 'Related Shows')) elif self.video.type == 'movie': self.setProperty('preview', '') self.setProperty( 'thumb', self.video.thumb.asTranscodedImageURL(*self.THUMB_POSTER_DIM)) genres = u' / '.join([g.tag for g in self.video.genres()][:3]) self.setProperty('info', genres) self.setProperty('date', self.video.year) self.setProperty('content.rating', self.video.contentRating.split('/', 1)[-1]) cast = u' / '.join([r.tag for r in self.video.roles()][:5]) castLabel = 'CAST' self.setProperty( 'writers', cast and u'{0} {1}'.format(castLabel, cast) or '') self.setProperty('related.header', T(32404, 'Related Movies')) self.setProperty('video.res', self.video.resolutionString()) self.setProperty('audio.codec', self.video.audioCodecString()) self.setProperty('audio.channels', self.video.audioChannelsString(metadata.apiTranslate)) self.setProperties(('rating.stars', 'rating', 'rating.image', 'rating2', 'rating2.image'), '') if self.video.userRating: stars = str(int(round((self.video.userRating.asFloat() / 10) * 5))) self.setProperty('rating.stars', stars) # elif self.video.rating: # stars = str(int(round((self.video.rating.asFloat() / 10) * 5))) # self.setProperty('rating.stars', stars) if self.video.ratingImage: rating = self.video.rating audienceRating = self.video.audienceRating if self.video.ratingImage.startswith('rottentomatoes:'): rating = '{0}%'.format(int(rating.asFloat() * 10)) if audienceRating: audienceRating = '{0}%'.format( int(audienceRating.asFloat() * 10)) self.setProperty('rating', rating) self.setProperty( 'rating.image', 'script.plex/ratings/{0}.png'.format( self.video.ratingImage.replace('://', '/'))) if self.video.audienceRatingImage: self.setProperty('rating2', audienceRating) self.setProperty( 'rating2.image', 'script.plex/ratings/{0}.png'.format( self.video.audienceRatingImage.replace('://', '/'))) else: self.setProperty('rating', self.video.rating) self.setAudioAndSubtitleInfo() self.setProperty( 'unavailable', not self.video.media()[0].isAccessible() and '1' or '') if self.video.viewOffset.asInt(): width = self.video.viewOffset.asInt() and (1 + int( (self.video.viewOffset.asInt() / self.video.duration.asFloat()) * self.width)) or 1 self.progressImageControl.setWidth(width) else: self.progressImageControl.setWidth(1)
def airingsListClicked(self, item=None, get_args_only=False): item = item or self.airingsList.getSelectedItem() if not item: return airing = item.dataSource.get('airing') while not airing and backgroundthread.BGThreader.working() and not xbmc.abortRequested: xbmc.sleep(100) airing = item.dataSource.get('airing') if not airing: util.DEBUG_LOG('GuideShowWindow.airingsListClicked(): Failed to get airing!') return info = T(32143).format( airing.displayChannel(), airing.network, airing.displayDay(), airing.displayTimeStart(), airing.displayTimeEnd() ) kwargs = { 'number': airing.number, 'background': self._show.background, 'callback': self.actionDialogCallback, 'obj': airing, 'start_indicator1': 'new' in airing.qualifiers and 'indicators/qualifier_new_hd.png' or '', 'start_indicator2': 'live' in airing.qualifiers and 'indicators/qualifier_live_hd.png' or '' } self.setDialogButtons(airing, kwargs) if airing.ended(): secs = airing.secondsSinceEnd() start = T(32144).format(util.durationToText(secs)) kwargs['button1'] = None kwargs['button2'] = None else: secs = airing.secondsToStart() if secs < 1: start = T(32145).format(util.durationToText(secs * -1)) else: start = T(32146).format(util.durationToText(secs)) kwargs['item_count'] = len(self.airingItems) kwargs['item_pos'] = int(item.getProperty('pos')) if airing.type == 'schedule': description = self._show.plot or self._show.description else: description = airing.description if get_args_only: kwargs['title'] = airing.title or self._show.title kwargs['info'] = info kwargs['plot'] = description kwargs['start'] = start return kwargs pos = actiondialog.openDialog( airing.title or self._show.title, info, description, start, **kwargs ) if isinstance(pos, int): item = self.getItemByPos(pos) if item: self.airingsList.selectItem(item.pos()) self.updateIndicators()
def airingsListClicked(self, item=None, get_args_only=False): item = item or self.airingsList.getSelectedItem() if not item: return airing = item.dataSource.get('airing') while not airing and backgroundthread.BGThreader.working( ) and not xbmc.abortRequested: xbmc.sleep(100) airing = item.dataSource.get('airing') if not airing: util.DEBUG_LOG( 'GuideShowWindow.airingsListClicked(): Failed to get airing!') return info = T(32143).format(airing.displayChannel(), airing.network, airing.displayDay(), airing.displayTimeStart(), airing.displayTimeEnd()) kwargs = { 'number': airing.number, 'background': self._show.background, 'callback': self.actionDialogCallback, 'obj': airing, 'start_indicator1': 'new' in airing.qualifiers and 'indicators/qualifier_new_hd.png' or '', 'start_indicator2': 'live' in airing.qualifiers and 'indicators/qualifier_live_hd.png' or '' } self.setDialogButtons(airing, kwargs) if airing.ended(): secs = airing.secondsSinceEnd() start = T(32144).format(util.durationToText(secs)) kwargs['button1'] = None kwargs['button2'] = None else: secs = airing.secondsToStart() if secs < 1: start = T(32145).format(util.durationToText(secs * -1)) else: start = T(32146).format(util.durationToText(secs)) kwargs['item_count'] = len(self.airingItems) kwargs['item_pos'] = int(item.getProperty('pos')) if airing.type == 'schedule': description = self._show.plot or self._show.description else: description = airing.description if get_args_only: kwargs['title'] = airing.title or self._show.title kwargs['info'] = info kwargs['plot'] = description kwargs['start'] = start return kwargs pos = actiondialog.openDialog(airing.title or self._show.title, info, description, start, **kwargs) if isinstance(pos, int): item = self.getItemByPos(pos) if item: self.airingsList.selectItem(item.pos()) self.updateIndicators()