Exemplo n.º 1
0
    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
Exemplo n.º 2
0
    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
Exemplo n.º 3
0
    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)
Exemplo n.º 4
0
    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)
Exemplo n.º 5
0
    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)
Exemplo n.º 6
0
    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
        )
Exemplo n.º 7
0
    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
Exemplo n.º 8
0
    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)
Exemplo n.º 9
0
    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)
Exemplo n.º 10
0
    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
Exemplo n.º 11
0
 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()))
Exemplo n.º 12
0
    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
Exemplo n.º 13
0
    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
Exemplo n.º 14
0
    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
Exemplo n.º 15
0
    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
Exemplo n.º 16
0
    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)
Exemplo n.º 17
0
    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)
Exemplo n.º 18
0
    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()
Exemplo n.º 19
0
    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)
Exemplo n.º 20
0
    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()
Exemplo n.º 21
0
    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()