def _reallyShowPhoto(self): self.setProperty('photo', 'script.plex/indicators/busy-photo.gif') photo = self.playQueue.current() photo.softReload() self.playerObject = plexplayer.PlexPhotoPlayer(photo) meta = self.playerObject.build() url = photo.server.getImageTranscodeURL(meta.get('url', ''), self.width, self.height) self.setRotation(0) self.setProperty('photo', url) self.setProperty( 'background', photo.thumb.asTranscodedImageURL( self.width, self.height, blur=128, opacity=60, background=colors.noAlpha.Background)) self.setProperty('photo.title', photo.title) self.setProperty( 'photo.date', util.cleanLeadingZeros( photo.originallyAvailableAt.asDatetime('%d %B %Y'))) self.setProperty('camera.model', photo.media[0].model) self.setProperty('camera.lens', photo.media[0].lens) if photo.media[0].height: dims = u'{0} x {1}{2}'.format( photo.media[0].width, photo.media[0].height, photo.media[0].parts[0].orientation and u' \u2022 {0} Mo'.format(photo.media[0].parts[0].orientation) or '') self.setProperty('photo.dims', dims) settings = [] if photo.media[0].iso: settings.append('ISO {0}'.format(photo.media[0].iso)) if photo.media[0].aperture: settings.append('{0}'.format(photo.media[0].aperture)) if photo.media[0].exposure: settings.append('{0}'.format(photo.media[0].exposure)) self.setProperty('camera.settings', u' \u2022 '.join(settings)) self.setProperty('photo.summary', photo.summary) container = photo.media[0].container_ or os.path.splitext( photo.media[0].parts[0].file)[-1][1:].lower() if container == 'jpg': container = 'jpeg' self.setProperty('photo.container', container) self.updateNowPlaying(force=True, refreshQueue=True) self.resetSlideshowTimeout()
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 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 fillPhotos(self): self.setBoolProperty('no.content', False) self.setBoolProperty('no.content.filtered', False) items = [] keys = [] self.firstOfKeyItems = {} idx = 0 if self.section.TYPE == 'photodirectory': photos = self.section.all() else: photos = self.section.all(filter_=self.getFilterOpts(), sort=self.getSortOpts(), unwatched=self.filterUnwatched) if not photos: return photo = random.choice(photos) self.setProperty( 'background', photo.art.asTranscodedImageURL( self.width, self.height, blur=128, opacity=60, background=colors.noAlpha.Background)) thumbDim = TYPE_KEYS.get(self.section.type, TYPE_KEYS['movie'])['thumb_dim'] fallback = 'script.plex/thumb_fallbacks/{0}.png'.format( TYPE_KEYS.get(self.section.type, TYPE_KEYS['movie'])['fallback']) if not photos: if self.filter or self.filterUnwatched: self.setBoolProperty('no.content.filtered', True) else: self.setBoolProperty('no.content', True) return for photo in photos: title = photo.title if photo.TYPE == 'photodirectory': thumb = photo.composite.asTranscodedImageURL(*thumbDim) mli = kodigui.ManagedListItem(title, thumbnailImage=thumb, data_source=photo) mli.setProperty('is.folder', '1') else: thumb = photo.defaultThumb.asTranscodedImageURL(*thumbDim) label2 = util.cleanLeadingZeros( photo.originallyAvailableAt.asDatetime('%d %B %Y')) mli = kodigui.ManagedListItem(title, label2, thumbnailImage=thumb, data_source=photo) mli.setProperty('thumb.fallback', fallback) mli.setProperty('index', str(idx)) key = title[0].upper() if key not in KEYS: key = '#' if key not in keys: self.firstOfKeyItems[key] = mli keys.append(key) mli.setProperty('key', str(key)) items.append(mli) idx += 1 litems = [] self.keyItems = {} for i, key in enumerate(keys): mli = kodigui.ManagedListItem(key, data_source=key) mli.setProperty('key', key) mli.setProperty('original', '{0:02d}'.format(i)) self.keyItems[key] = mli litems.append(mli) self.showPanelControl.reset() self.keyListControl.reset() self.showPanelControl.addItems(items) self.keyListControl.addItems(litems) if keys: self.setProperty('key', keys[0])