コード例 #1
0
    def showSettings(self, section):
        settings = self.settings[section][1]
        if not settings:
            return self.settingsList.reset()

        items = []
        for setting in settings:
            item = kodigui.ManagedListItem(
                setting.label,
                setting.type != 'BOOL' and setting.valueLabel() or '',
                data_source=setting)
            item.setProperty('description', setting.desc)
            if setting.type == 'BOOL':
                item.setProperty('checkbox', '1')
                item.setProperty('checkbox.checked',
                                 setting.get() and '1' or '')

            items.append(item)

        self.settingsList.reset()
        self.settingsList.addItems(items)
コード例 #2
0
    def fillSettingsList(self, update=False):
        sItem = self.item.dataSource

        items = []
        for i, e in enumerate(sItem._elements):
            if not sItem.elementVisible(e):
                continue
            attr = e['attr']
            mli = kodigui.ManagedListItem(
                e['name'], e['limits'] != cinemavision.sequence.LIMIT_ACTION and unicode(sItem.getSettingDisplay(attr)) or '', data_source=attr
            )
            if sItem.getType(attr) == int:
                mli.setProperty('type', 'integer')
            items.append(mli)

        if update:
            self.settingsList.replaceItems(items)
        else:
            self.settingsList.reset()
            self.settingsList.addItems(items)

        self.setFocusId(self.SETTINGS_LIST_ID)
コード例 #3
0
    def fillRoles(self, has_prev=False):
        items = []
        idx = 0

        if not self.video.roles:
            self.rolesListControl.reset()
            return False

        for role in self.video.roles():
            mli = kodigui.ManagedListItem(role.tag, role.role, thumbnailImage=role.thumb.asTranscodedImageURL(*self.ROLES_DIM), data_source=role)
            mli.setProperty('index', str(idx))
            items.append(mli)
            idx += 1

        if not items:
            return False

        self.setProperty('divider.{0}'.format(self.ROLES_LIST_ID), has_prev and '1' or '')

        self.rolesListControl.reset()
        self.rolesListControl.addItems(items)
        return True
コード例 #4
0
    def updateProperties(self, **kwargs):
        if not self.started:
            return

        if self.fromSeek:
            self.setFocusId(self.MAIN_BUTTON_ID)
            self.fromSeek = 0

        self.setProperty('has.bif', self.bifURL and '1' or '')
        self.setProperty('video.title', self.title)
        self.setProperty('video.title2', self.title2)
        self.setProperty('is.show',
                         (self.player.video.type == 'episode') and '1' or '')
        self.setProperty('time.left', util.timeDisplay(self.duration))

        pq = self.handler.playlist
        if pq:
            self.setProperty('has.playlist', '1')
            self.setProperty('pq.isRemote', pq.isRemote and '1' or '')
            self.setProperty('pq.hasnext', pq.hasNext() and '1' or '')
            self.setProperty('pq.hasprev', pq.hasPrev() and '1' or '')
            self.setProperty('pq.repeat', pq.isRepeat and '1' or '')
            self.setProperty('pq.repeat.one', pq.isRepeatOne and '1' or '')
            self.setProperty('pq.shuffled', pq.isShuffled and '1' or '')
        else:
            self.setProperties(('pq.isRemote', 'pq.hasnext', 'pq.hasprev',
                                'pq.repeat', 'pq.shuffled', 'has.playlist'),
                               '')

        self.updateCurrent()

        div = int(self.duration / 12)
        items = []
        for x in range(12):
            offset = div * x
            items.append(kodigui.ManagedListItem(data_source=offset))
        self.bigSeekControl.reset()
        self.bigSeekControl.addItems(items)
コード例 #5
0
    def showDevices(self):
        self.setProperty('tablo.found', '')
        self.deviceList.reset()
        tablo.API.discover()
        self.addTestDevice()
        for device in sorted(tablo.API.devices.tablos,
                             key=lambda x: x.displayName):
            if not self.deviceVersionAllowed(device):
                util.DEBUG_LOG(
                    'Skipping device because of low version: {0}'.format(
                        device))
                continue
            self.deviceList.addItem(
                kodigui.ManagedListItem(device.displayName,
                                        data_source=device))

        self.setProperty('initialized', '1')

        self.setProperty('tablo.found', '1')
        if self.deviceList.size():
            self.setFocusId(200)
        else:
            self.setFocusId(300)
コード例 #6
0
ファイル: episodes.py プロジェクト: Zero0Q/plex-for-kodi
    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
コード例 #7
0
    def fillOptions(self):
        for i in cinemavision.sequence.ITEM_TYPES:
            item = kodigui.ManagedListItem(
                '{0}: {1}'.format(T(32530, 'Add'), i[1]),
                thumbnailImage='small/script.cinemavision-{0}.png'.format(i[2]),
                data_source=i[0]
            )
            item.setProperty('thumb.focus', 'small/script.cinemavision-{0}_selected.png'.format(i[2]))
            self.addItemControl.addItem(item)

        item = kodigui.ManagedListItem(T(32531, 'Edit'), T(32531, 'Edit'), thumbnailImage='small/script.cinemavision-edit.png', data_source='edit')
        item.setProperty('alt.thumb', 'small/script.cinemavision-edit.png')
        item.setProperty('thumb.focus', 'small/script.cinemavision-A_selected.png')
        self.itemOptionsControl.addItem(item)

        item = kodigui.ManagedListItem(T(32532, 'Rename'), T(32532, 'Rename'), thumbnailImage='small/script.cinemavision-rename.png', data_source='rename')
        item.setProperty('alt.thumb', 'small/script.cinemavision-rename.png')
        item.setProperty('thumb.focus', 'small/script.cinemavision-A_selected.png')
        self.itemOptionsControl.addItem(item)

        item = kodigui.ManagedListItem(T(32533, 'Copy'), T(32533, 'Copy'), thumbnailImage='small/script.cinemavision-copy.png', data_source='copy')
        item.setProperty('alt.thumb', 'small/script.cinemavision-copy.png')
        item.setProperty('thumb.focus', 'small/script.cinemavision-A_selected.png')
        self.itemOptionsControl.addItem(item)

        item = kodigui.ManagedListItem(T(32534, 'Move'), T(32534, 'Move'), thumbnailImage='small/script.cinemavision-move.png', data_source='move')
        item.setProperty('alt.thumb', 'small/script.cinemavision-move.png')
        item.setProperty('thumb.focus', 'small/script.cinemavision-A_selected.png')
        self.itemOptionsControl.addItem(item)

        item = kodigui.ManagedListItem(T(32535, 'Disable'), T(32535, 'Disable'), thumbnailImage='small/script.cinemavision-disable.png', data_source='enable')
        item.setProperty('alt.thumb', 'small/script.cinemavision-enable.png')
        item.setProperty('thumb.focus', 'small/script.cinemavision-A_selected.png')
        self.itemOptionsControl.addItem(item)

        item = kodigui.ManagedListItem(T(32536, 'Remove'), T(32536, 'Remove'), thumbnailImage='small/script.cinemavision-minus.png', data_source='remove')
        item.setProperty('alt.thumb', 'small/script.cinemavision-minus.png')
        item.setProperty('thumb.focus', 'small/script.cinemavision-A_selected.png')
        self.itemOptionsControl.addItem(item)
コード例 #8
0
    def fillRelated(self, has_prev=False):
        items = []
        idx = 0

        if not self.video.related:
            self.relatedListControl.reset()
            return False

        for rel in self.video.related()[0].items:
            mli = kodigui.ManagedListItem(rel.title or '', thumbnailImage=rel.thumb.asTranscodedImageURL(*self.RELATED_DIM), data_source=rel)
            if mli:
                mli.setProperty('thumb.fallback', 'script.plex/thumb_fallbacks/{0}.png'.format(rel.type in ('show', 'season', 'episode') and 'show' or 'movie'))
                mli.setProperty('index', str(idx))
                items.append(mli)
                idx += 1

        if not items:
            return False

        self.setProperty('divider.{0}'.format(self.RELATED_LIST_ID), has_prev and '1' or '')

        self.relatedListControl.reset()
        self.relatedListControl.addItems(items)
        return True
コード例 #9
0
    def start(self):
        self.setProperty('busy', '1')
        try:
            users = plexapp.ACCOUNT.homeUsers

            items = []
            for user in users:
                # thumb, back = image.getImage(user.thumb, user.id)
                # mli = kodigui.ManagedListItem(user.title, thumbnailImage=thumb, data_source=user)
                mli = kodigui.ManagedListItem(user.title, user.title[0].upper(), data_source=user)
                mli.setProperty('pin', user.title)
                # mli.setProperty('back.image', back)
                mli.setProperty('protected', user.isProtected and '1' or '')
                mli.setProperty('admin', user.isAdmin and '1' or '')
                items.append(mli)

            self.userList.addItems(items)
            self.task = UserThumbTask().setup(users, self.userThumbCallback)
            backgroundthread.BGThreader.addTask(self.task)

            self.setFocusId(self.USER_LIST_ID)
            self.setProperty('initialized', '1')
        finally:
            self.setProperty('busy', '')
コード例 #10
0
ファイル: dvr.py プロジェクト: camster1/RTOTV
    def fillRecordings(self):
        items = []
        self.count = 0
        for r in self.storageServer.recordings:
            if self.groupID and not r.displayGroupID == self.groupID: continue
            item = kodigui.ManagedListItem(r.episodeTitle,
                                           r.synopsis,
                                           thumbnailImage=r.icon,
                                           data_source=r)
            item.setProperty('series.title', r.seriesTitle)
            item.setProperty('episode.number', r.episodeNumber)
            #item.setProperty('channel.number',r.channelNumber)
            #item.setProperty('channel.name',r.channelName)
            item.setProperty('air.date', r.displayDate())
            item.setProperty('air.time', r.displayTime())
            item.setProperty('original.date', r.displayDate(original=True))
            items.append(item)

        self.sortItems(items)

        self.recordingList.reset()
        self.recordingList.addItems(items)
        self.count = self.recordingList.size()
        self.setFocusId(self.RECORDING_LIST_ID)
コード例 #11
0
    def fillRules(self,update=False):
        self.lastRulesRefresh = time.time()
        if update: self.storageServer.updateRules()

        items = []
        for r in self.storageServer.rules:
            item = kodigui.ManagedListItem(r.title,data_source=r)
            if r.dateTimeOnly:
                item.setProperty('rule.recent_only','{0} at {1}'.format(r.displayDateDTO(), r.displayTimeDTO()))
            elif r.teamOnly:
                item.setProperty('rule.recent_only', '{0}: {1}'.format('TEAM', r.teamOnly))
            else:
                item.setProperty('rule.recent_only',r.recentOnly and T(32805) or T(32806))
            item.setProperty('seriesID', r.seriesID)
            #print '{0} {1}'.format(r.ruleID, r.title)
            items.append(item)

        if not items:
            util.setGlobalProperty('NO_RULES',self.storageServer.getRulesFailed and u'[COLOR 80FF0000]{0}[/COLOR]'.format(T(32830)) or T(32804))
        else:
            util.setGlobalProperty('NO_RULES','')

        self.ruleList.reset()
        self.ruleList.addItems(items)
コード例 #12
0
 def createMovieListItem(self, movie):
     mli = kodigui.ManagedListItem(movie.title, movie.year, thumbnailImage=movie.art.asTranscodedImageURL(*self.LI_AR16X9_THUMB_DIM), data_source=movie)
     mli.setProperty('track.duration', util.durationToShortText(movie.duration.asInt()))
     mli.setProperty('video', '1')
     mli.setProperty('watched', movie.isWatched and '1' or '')
     return mli
コード例 #13
0
 def createListItem(self, obj):
     mli = kodigui.ManagedListItem(
         obj.title or '',
         thumbnailImage=obj.thumb.asTranscodedImageURL(*self.EXTRA_DIM),
         data_source=obj)
     return mli
コード例 #14
0
ファイル: tracks.py プロジェクト: J0hnnyD03/Plex
 def createListItem(self, obj):
     mli = kodigui.ManagedListItem(obj.title, data_source=obj)
     mli.setProperty('track.number', str(obj.index) or '')
     mli.setProperty('track.duration',
                     util.simplifiedTimeDisplay(obj.duration.asInt()))
     return mli
コード例 #15
0
    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])
コード例 #16
0
    def fillShows(self):
        self.setBoolProperty('no.content', False)
        self.setBoolProperty('no.content.filtered', False)
        items = []
        jitems = []
        self.keyItems = {}
        self.firstOfKeyItems = {}
        totalSize = 0

        jumpList = self.section.jumpList(filter_=self.getFilterOpts(),
                                         sort=self.getSortOpts(),
                                         unwatched=self.filterUnwatched)
        idx = 0
        fallback = 'script.plex/thumb_fallbacks/{0}.png'.format(
            TYPE_KEYS.get(self.section.type, TYPE_KEYS['movie'])['fallback'])

        if not jumpList:
            if self.filter or self.filterUnwatched:
                self.setBoolProperty('no.content.filtered', True)
            else:
                self.setBoolProperty('no.content', True)
            return

        for kidx, ji in enumerate(jumpList):
            mli = kodigui.ManagedListItem(ji.title, data_source=ji.key)
            mli.setProperty('key', ji.key)
            mli.setProperty('original', '{0:02d}'.format(kidx))
            self.keyItems[ji.key] = mli
            jitems.append(mli)
            totalSize += ji.size.asInt()

            for x in range(ji.size.asInt()):
                mli = kodigui.ManagedListItem('')
                mli.setProperty('key', ji.key)
                mli.setProperty('thumb.fallback', fallback)
                mli.setProperty('index', str(idx))
                items.append(mli)
                if not x:  # i.e. first item
                    self.firstOfKeyItems[ji.key] = mli
                idx += 1

        self.showPanelControl.reset()
        self.keyListControl.reset()

        self.showPanelControl.addItems(items)
        self.keyListControl.addItems(jitems)

        if jumpList:
            self.setProperty('key', jumpList[0].key)

        tasks = []
        for start in range(0, totalSize, 500):
            tasks.append(ChunkRequestTask().setup(
                self.section,
                start,
                500,
                self.chunkCallback,
                filter_=self.getFilterOpts(),
                sort=self.getSortOpts(),
                unwatched=self.filterUnwatched))

        self.tasks = tasks
        backgroundthread.BGThreader.addTasksToFront(tasks)
コード例 #17
0
    def fillShows(self, reset=False, clear=False):
        self.setProperty('show.recent', '')
        self.cancelTasks()

        self.setProperty('busy', '1')

        self.lastKey = None

        lastPath = None
        selectItem = None
        lastPos = None

        if not reset:
            currentItem = self.showList.getSelectedItem()
            if currentItem:
                lastPath = currentItem.dataSource['path']
                lastPos = currentItem.pos()

        self.showItems = {}

        if clear:
            self.showList.reset()
            self.keysList.reset()

        args = {}
        if self.state:
            args = {'state': self.state}

        try:
            if self.filter == 'SERIES':
                keys = tablo.API.views(self.view).series.get(**args)
            elif self.filter == 'MOVIES':
                keys = tablo.API.views(self.view).movies.get(**args)
            elif self.filter == 'SPORTS':
                keys = tablo.API.views(self.view).sports.get(**args)
            elif self.filter == 'MANUAL':
                keys = tablo.API.views(self.view).programs.get(**args)
            else:
                keys = tablo.API.views(self.view).shows.get(**args)
        except tablo.ConnectionError:
            self.setProperty('busy', '')
            msg = T(32125).format(tablo.API.device.displayName)
            self.showList.reset()
            self.keysList.reset()
            self.setProperty('empty.message', msg)
            # xbmcgui.Dialog().ok('Connection Failure', msg)
            return
        except:
            msg = util.ERROR()
            self.showList.reset()
            self.keysList.reset()
            self.setProperty('busy', '')
            self.setProperty('empty.message',
                             u'{0}: {1}'.format(T(32126), msg))
            xbmcgui.Dialog().ok(T(32126), u'{0}: {1}'.format(T(32126), msg))
            return

        paths = []

        keyitems = []
        items = []
        ct = 0
        for i, k in enumerate(keys):
            key = k['key']
            keyitem = kodigui.ManagedListItem(key.upper())
            keyitem.setProperty('key', key)
            self.lastSelectedKey = self.lastSelectedKey or key

            if k.get('contents'):
                keyitem.setProperty('has.contents', '1')
                for p in k['contents']:
                    ct += 1
                    paths.append(p)
                    item = kodigui.ManagedListItem(data_source={
                        'path': p,
                        'key': key,
                        'show': None
                    })
                    if p == lastPath:
                        selectItem = item
                    item.setProperty('key', key)
                    if ct > 6:
                        item.setProperty('after.firstrow', '1')
                    self.showItems[p] = item
                    items.append(item)

            keyitems.append(keyitem)
            self.keys[k['key']] = i

        self.showList.reset()
        self.keysList.reset()

        self.keysList.addItems(keyitems)
        self.showList.addItems(items)

        if selectItem:
            self.showList.selectItem(selectItem.pos())
        elif lastPos:
            if self.showList.positionIsValid(lastPos):
                self.showList.selectItem(lastPos)
            else:
                if lastPos > 0:
                    self.showList.selectItem(self.showList.size() -
                                             1)  # Select last item

        if items:
            self.setProperty('empty.message', '')
            self.setProperty('empty.message2', '')

            if self.getFocusId() in (51, 400):
                self.setFocusId(self.SHOW_PANEL_ID)
        else:
            self.setProperty('busy', '')
            if self.filter == 'SERIES':
                message = self.emptyMessageTVShows
            elif self.filter == 'MOVIES':
                message = self.emptyMessageMovies
            elif self.filter == 'SPORTS':
                message = self.emptyMessageSports
            else:
                message = self.emptyMessage

            self.setProperty('empty.message', message[0])
            if len(message) > 1:
                self.setProperty('empty.message2', message[1])

        self.getShowData(paths)

        self.updateKey()
コード例 #18
0
    def fillAirings(self):
        self.setEmptyMessage(clear=True)
        self.airingsList.reset()
        self.airingItems = {}
        airings = []
        airingIDX = 0

        if isinstance(self._show, tablo.Series):
            seasons = self._show.seasons()
            if seasons:
                seasonsData = tablo.API.batch.post(seasons)

            first = True
            for seasonPath in seasons:
                self.seasonCount += 1
                season = seasonsData[seasonPath]

                number = season['season']['number']
                title = number and T(32155).format(number) or T(32156)

                item = kodigui.ManagedListItem('',
                                               data_source={
                                                   'path': None,
                                                   'airing': None
                                               })
                item.setProperty('header', '1')
                self.airingsList.addItem(item)

                item = kodigui.ManagedListItem(title,
                                               data_source={
                                                   'path': None,
                                                   'airing': None
                                               })
                item.setProperty('header', '1')
                item.setProperty('top', '1')
                self.airingsList.addItem(item)

                seasonEps = tablo.API(seasonPath).episodes.get()
                airings += seasonEps
                for p in seasonEps:
                    item = kodigui.ManagedListItem('',
                                                   data_source={
                                                       'path': p,
                                                       'airing': None
                                                   })
                    item.setProperty('pos', str(airingIDX))
                    airingIDX += 1
                    if first:
                        first = False
                        item.setProperty('top', '1')
                    self.airingItems[p] = item
                    self.airingsList.addItem(item)
        else:
            airings = self._show.airings()

            item = kodigui.ManagedListItem('',
                                           data_source={
                                               'path': None,
                                               'airing': None
                                           })
            item.setProperty('header', '1')
            self.airingsList.addItem(item)

            first = True
            for p in airings:
                item = kodigui.ManagedListItem('',
                                               data_source={
                                                   'path': p,
                                                   'airing': None
                                               })
                item.setProperty('pos', str(airingIDX))
                airingIDX += 1
                if first:
                    first = False
                    item.setProperty('top', '1')
                self.airingItems[p] = item
                self.airingsList.addItem(item)

        if not self.airingItems:
            self.setEmptyMessage()

        self.getAiringData(airings)
コード例 #19
0
    def mcList(self, category='all'):
        items = []

        category = plugintools.get_setting('mcLastCategory')
        if category == '' or category == None:
            category = 'all'

        plugintools.log('get mc category:' + category)
        self.programsList.reset()

        apiEndpoint = self.vader.apiEndpoint
        manualOffsetEnabled = plugintools.get_setting("mc_timezone_enable")
        mcBackward = float(
            plugintools.get_setting("mc_backward")) * 60 * 60 * -1
        mcForward = float(plugintools.get_setting("mc_forward")) * 60 * 60

        username = self.vader.username
        password = self.vader.password
        embedded = self.vader.embedded

        if self.mcData == None:
            data = self.getCachedData()
            self.mcData = json.loads(data.decode('utf-8'))

        if manualOffsetEnabled == 'true':
            offset = float(plugintools.get_setting('mc_timezone'))
            offset = offset * 60 * 60

        else:
            offset = 0

        timeNow = int(time.time())

        validItems = []
        itemsAdded = 0

        for epgItem in self.mcData:
            name = epgItem['name'].encode('utf-8')
            startTime = epgItem['startTime']
            endTime = epgItem['endTime']
            stream = epgItem['stream']

            addItem = False

            if int(endTime) > timeNow and int(startTime) < timeNow:
                addItem = True

            if int(startTime) - timeNow < 0 and int(
                    startTime) - timeNow > mcBackward:
                addItem = True

            if int(startTime) - timeNow > 0 and int(
                    startTime) - timeNow < mcForward:
                addItem = True

            if addItem == True:
                validItems.append(epgItem)

        sortedEpg = sorted(validItems, key=lambda k: k['startTime'])

        for epgItem in sortedEpg:
            startTime = int(epgItem['startTime']) + int(offset)
            endTime = int(epgItem['endTime']) + int((offset))
            quality = epgItem['quality']
            ss_chan = epgItem['ss_stream']
            itemCategory = epgItem['category']
            name = epgItem['name']
            parentId = epgItem['parentId']

            if category.lower() in itemCategory.lower() or category.lower(
            ) in 'all':
                if '0' == parentId:
                    startTimeString = datetime.fromtimestamp(
                        int(startTime)).strftime("%a - %H:%M")

                    title = '[COLOR crimson]' + itemCategory + '[/COLOR] ' + epgItem[
                        'name']
                    if embedded == True:
                        timeNow = time.time()
                        diffTime = timeNow % 3600
                        tokenTime = timeNow - diffTime
                        base = 'live'
                        extension = 'ts'
                        tokenString = username + password + str(
                            epgItem['stream']) + str(tokenTime)
                        token = hashlib.md5(tokenString).hexdigest()
                        chanUrl = 'http://{apiEndpoint}/boxRedir?token={token}&stream={stream}&base={base}&extension={extension}&plugin={plugin}'.format(
                            apiEndpoint=apiEndpoint,
                            token=token,
                            stream=epgItem['stream'],
                            base=base,
                            extension=extension,
                            plugin=ADDONID)
                    else:
                        chanUrl = 'http://%s/live/%s/%s/%s.%s' % (
                            apiEndpoint, username, password, epgItem['stream'],
                            'ts')
                    listitem = xbmcgui.ListItem(title,
                                                iconImage="DefaultVideo.png")
                    info_labels = {
                        "Title": title,
                        "FileName": title,
                        "Plot": title
                    }
                    listitem.setInfo("video", info_labels)
                    listitem.setProperty('IsPlayable', 'true')

                    item = kodigui.ManagedListItem(
                        title,
                        startTimeString,
                        iconImage=None,
                        data_source=chanUrl,
                        versions=epgItem['versions'])

                    qtex = ''
                    if endTime < time.time():
                        item.setProperty('old', 'old')

                    elif startTime <= time.time():
                        prog = ((timeNow - startTime) /
                                float(endTime - startTime)) * 100

                        prog = int(prog - (prog % 5))
                        tex = 'progress/script-progress_{0}.png'.format(prog)
                        item.setProperty('playing', tex)

                    if epgItem['versions'] == None:
                        item.setProperty('channel', str('#' + ss_chan))
                        if '720p' in quality.lower():
                            qtex = 'script-hd_720p.png'
                        elif '1080i' in quality.lower():
                            qtex = 'script-hd_1080i.png'
                        elif 'UHD' in quality.lower():
                            qtex = 'script-hd_720p.png'

                    else:
                        for version in epgItem['versions']:
                            if '(720p' in version['name'].lower():
                                qtex = 'script-hd_720p.png'
                            elif '(1080i' in version['name'].lower():
                                qtex = 'script-hd_1080i.png'
                            elif '(UHD' in version['name'].lower():
                                qtex = 'script-hd_720p.png'

                    itemsAdded = itemsAdded + 1
                    items.append(item)
                    item.setProperty('quality', qtex)

        self.programsList.addItems(items)

        for i in range(len(items)):
            if not items[i].getProperty('old'):
                self.programsList.selectItem(i)
                break

        plugintools.log(str(itemsAdded))
        if itemsAdded == 0:
            plugintools.log('no events for category')
            item = kodigui.ManagedListItem(
                'No Upcoming Events in {category}'.format(category=category),
                '',
                iconImage=None,
                data_source=None,
                versions=None)
            self.programsList.addItem(item)

        return True
コード例 #20
0
ファイル: main.py プロジェクト: camster1/RTOTV
    def fillSequence(self):
        mli = kodigui.ManagedListItem()

        self.sequenceControl.addItem(mli)
コード例 #21
0
    def fillRecent(self):
        self.setProperty('show.recent', '1')
        self.showList.reset()
        self.airingsList.reset()
        self.showItems = {}
        airings = []

        self.setProperty('busy', '1')

        recentDates = tablo.API.views.recordings.recent.get()

        first = True
        now = time.localtime()
        for date in recentDates:
            tt = time.strptime(date['key'], '%Y-%m-%d')
            label = None
            if tt.tm_year == now.tm_year:
                if tt.tm_yday == now.tm_yday:
                    label = T(32184)
                elif tt.tm_yday == now.tm_yday - 1:
                    label = T(32185)
            label = label or time.strftime('%A, %B %d', tt)

            item = kodigui.ManagedListItem(label,
                                           data_source={
                                               'path': None,
                                               'airing': None
                                           })
            item.setProperty('header', '1')
            item.setProperty('top', '1')
            if not first:
                item.setProperty('after.firstrow', '1')

            self.airingsList.addItem(item)

            for airingPath in date['contents']:
                airings.append(airingPath)
                item = kodigui.ManagedListItem('',
                                               data_source={
                                                   'path': airingPath,
                                                   'airing': None
                                               })
                if first:
                    first = False
                    item.setProperty('top', '1')
                else:
                    item.setProperty('after.firstrow', '1')
                self.showItems[airingPath] = item
                self.airingsList.addItem(item)

        if self.airingsList.size():
            self.setProperty('empty.message', '')
            self.setProperty('empty.message2', '')

            if self.getFocusId() in (51, 400):
                self.setFocusId(self.RECENT_LIST_ID)

            self.getAiringData(airings)
        else:
            self.setProperty('busy', '')

            self.setProperty('empty.message', T(32186))
コード例 #22
0
ファイル: home.py プロジェクト: fishingbit/plex-for-kodi
    def _showHub(self,
                 hub,
                 hubitems=None,
                 index=None,
                 with_progress=False,
                 with_art=False,
                 ar16x9=False,
                 text2lines=False,
                 **kwargs):
        control = self.hubControls[index]
        control.dataSource = hub

        if not hub.items and not hubitems:
            control.reset()
            return

        if not hubitems:
            hub.reset()

        self.setProperty('hub.4{0:02d}'.format(index), hub.title
                         or kwargs.get('title'))
        self.setProperty('hub.text2lines.4{0:02d}'.format(index),
                         text2lines and '1' or '')

        items = []

        for obj in hubitems or hub.items:
            if not self.backgroundSet:
                self.backgroundSet = True
                self.setProperty(
                    'background',
                    obj.art.asTranscodedImageURL(
                        self.width,
                        self.height,
                        blur=128,
                        opacity=60,
                        background=colors.noAlpha.Background))
            mli = self.createListItem(obj, wide=with_art)
            if mli:
                items.append(mli)

        if with_progress:
            for mli in items:
                mli.setProperty('progress',
                                util.getProgressImage(mli.dataSource))
        if with_art:
            for mli in items:
                mli.setThumbnailImage(
                    mli.dataSource.art.asTranscodedImageURL(
                        *self.THUMB_AR16X9_DIM))
                mli.setProperty('thumb.fallback',
                                'script.plex/thumb_fallbacks/movie16x9.png')
        if ar16x9:
            for mli in items:
                mli.setProperty('thumb.fallback',
                                'script.plex/thumb_fallbacks/movie16x9.png')

        if hub.more.asBool():
            end = kodigui.ManagedListItem('')
            end.setBoolProperty('is.end', True)
            items.append(end)

        if hubitems:
            end = control.size() - 1
            control.replaceItem(end, items[0])
            control.addItems(items[1:])
            control.selectItem(end)
        else:
            control.replaceItems(items)
コード例 #23
0
    def mcList(self, category='all'):
        items = []

        category = plugintools.get_setting('mcLastCategory')
        if category == '' or category == None:
            category = 'all'

        self.programsList.reset()

        apiEndpoint = self.vader.apiEndpoint
        manualOffsetEnabled = plugintools.get_setting("mc_timezone_enable")

        username = self.vader.username
        password = self.vader.password
        embedded = self.vader.embedded
        from_zone = tz.tzutc()
        to_zone = tz.tzlocal()
        if self.mcData == None:
            data = self.getCachedData()
            self.mcData = json.loads(data.decode('utf-8'))

        if manualOffsetEnabled == True:
            offset = float(plugintools.get_setting('mc_timezone'))
        else:
            offset = -1000

        if offset != -1000:
            timeNow = datetime.utcnow().replace(
                tzinfo=tzoffset('UTC+0', 0)) + timedelta(hours=int(offset))
        else:
            timeNow = datetime.utcnow().replace(tzinfo=tzoffset('UTC+0', 0))
        itemsAdded = 0
        sortedEpg = sorted(self.mcData, key=lambda k: k['startTime'])

        for epgItem in sortedEpg:
            if len(epgItem['streams']) > 0:
                if offset != -1000:

                    startTime = dateutil.parser.parse(
                        epgItem['startTime']) + timedelta(hours=int(offset))
                    endTime = dateutil.parser.parse(
                        epgItem['endTime']) + timedelta(hours=int(offset))
                else:
                    startTime = dateutil.parser.parse(epgItem['startTime'])
                    startTime = startTime.replace(tzinfo=from_zone)
                    startTime = startTime.astimezone(to_zone)

                    endTime = dateutil.parser.parse(epgItem['endTime'])
                    endTime = endTime.replace(tzinfo=from_zone)
                    endTime = endTime.astimezone(to_zone)
                itemCategory = epgItem['category']['name']
                name = epgItem['title']

                if category.lower() in itemCategory.lower() or category.lower(
                ) in 'all':
                    startTimeString = startTime.strftime("%a - %H:%M")

                    title = '[COLOR crimson]' + itemCategory + '[/COLOR] ' + epgItem[
                        'title']
                    if embedded == True:
                        diffTime = to_timestamp(timeNow) % 3600
                        tokenTime = to_timestamp(timeNow) - diffTime
                        base = 'live'
                        extension = self.vader.stream_format
                        tokenString = username + password + str(
                            epgItem['streams'][0]['id']) + str(tokenTime)
                        token = hashlib.md5(tokenString).hexdigest()
                        chanUrl = 'http://{apiEndpoint}/boxRedir?token={token}&stream={stream}&base={base}&extension={extension}&plugin={plugin}'.format(
                            apiEndpoint=apiEndpoint,
                            token=token,
                            stream=epgItem['streams'][0]['id'],
                            base=base,
                            extension=extension,
                            plugin=ADDONID)
                    else:
                        tokenDict = {}
                        tokenDict['username'] = username
                        tokenDict['password'] = password
                        jsonToken = json.dumps(tokenDict)
                        import base64
                        tokens = base64.b64encode(jsonToken)
                        chanUrl = 'http://vapi.vaders.tv/play/{streamId}.m3u8?token={token}'.format(
                            token=tokens, streamId=epgItem['streams'][0]['id'])

                    listitem = xbmcgui.ListItem(title,
                                                iconImage="DefaultVideo.png")
                    info_labels = {
                        "Title": title,
                        "FileName": title,
                        "Plot": title
                    }
                    listitem.setInfo("video", info_labels)
                    listitem.setProperty('IsPlayable', 'true')

                    item = kodigui.ManagedListItem(title,
                                                   startTimeString,
                                                   iconImage=None,
                                                   data_source=chanUrl,
                                                   versions=epgItem['streams'])

                    endTimeTS = self.totimestamp(
                        endTime.astimezone(from_zone).replace(tzinfo=None))
                    timeNowTS = self.totimestamp(
                        timeNow.astimezone(from_zone).replace(tzinfo=None))
                    startTimeTS = self.totimestamp(
                        startTime.astimezone(from_zone).replace(tzinfo=None))

                    qtex = ''
                    if endTimeTS < timeNowTS:
                        item.setProperty('old', 'old')

                    elif startTimeTS <= timeNowTS:

                        # prog = ((to_timestamp(timeNow) - to_timestamp(startTime)) / float(to_timestamp(endTime)-to_timestamp(startTime))) * 100
                        prog = ((float(timeNowTS) - float(startTimeTS)) /
                                (float(endTimeTS) - float(startTimeTS))) * 100
                        # 1511760353 - 1511753400 / 1511760600-1511753400
                        # 6953 /7,200
                        prog = int(prog - (prog % 5))

                        tex = 'progress/script-progress_{0}.png'.format(prog)
                        item.setProperty('playing', tex)

                        for version in epgItem['streams']:
                            if '(720p' in version['name'].lower():
                                qtex = 'script-hd_720p.png'
                            elif '(1080i' in version['name'].lower():
                                qtex = 'script-hd_1080i.png'
                            elif '(UHD' in version['name'].lower():
                                qtex = 'script-hd_720p.png'
                    else:
                        item.setProperty('old', 'old')
                        timeNowTS = self.totimestamp(
                            timeNow.astimezone(from_zone).replace(tzinfo=None))
                        startTimeTS = self.totimestamp(
                            startTime.astimezone(from_zone).replace(
                                tzinfo=None))

                        timeinMins = (startTimeTS - timeNowTS) / 60
                        timeLabel = 'Starts in {mins} minutes'.format(
                            mins=timeinMins)

                        if timeinMins > 60:
                            timeLabel = 'Starts in {hours} hours'.format(
                                hours=int(math.ceil(timeinMins / 60)) + 1)

                        item.setProperty('startsin', timeLabel)

                    itemsAdded = itemsAdded + 1
                    items.append(item)
                    item.setProperty('quality', qtex)

                    if len(epgItem['streams']) == 1:
                        item.setProperty('duration',
                                         epgItem['streams'][0]['name'])

        self.programsList.addItems(items)

        for i in range(len(items)):
            if not items[i].getProperty('old'):
                self.programsList.selectItem(i)
                break

        plugintools.log(str(itemsAdded))
        if itemsAdded == 0:
            plugintools.log('no events for category')
            item = kodigui.ManagedListItem(
                'No Upcoming Events in {category}'.format(category=category),
                '',
                iconImage=None,
                data_source=None,
                versions=None)
            self.programsList.addItem(item)

        return True