def featureFromJSON(self, r): tags3DRegEx = kodiutil.getSetting('3D.tag.regex', cvutil.DEFAULT_3D_RE) feature = cinemavision.sequenceprocessor.Feature(r['file']) feature.title = r.get('title') or r.get('label', '') ratingString = cvutil.ratingParser().getActualRatingFromMPAA( r.get('mpaa', ''), debug=True) if ratingString: feature.rating = ratingString feature.ID = kodiutil.intOrZero( r.get('movieid', r.get('episodeid', r.get('id', 0)))) feature.dbType = r.get('type', '') feature.genres = r.get('genre', []) feature.tags = r.get('tag', []) feature.studios = r.get('studio', []) feature.directors = r.get('director', []) feature.cast = r.get('cast', []) feature.thumb = r.get('thumbnail', '') feature.runtime = r.get('runtime', 0) feature.year = r.get('year', 0) try: stereomode = r['streamdetails']['video'][0]['stereomode'] except: stereomode = '' if stereomode not in ('mono', ''): feature.is3D = True else: feature.is3D = bool(re.search(tags3DRegEx, r['file'])) try: codec, channels = self.getCodecAndChannelsFromStreamDetails( r['streamdetails']) DEBUG_LOG('CODEC ({0}): {1} ({2} channels)'.format( kodiutil.strRepr(feature.title), codec, channels or '?')) DEBUG_LOG('STREAMDETAILS: \n{0}'.format( self.formatStreamDetails(r.get('streamdetails')))) feature.audioFormat = AUDIO_FORMATS.get(codec) feature.codec = codec feature.channels = channels except: kodiutil.ERROR() DEBUG_LOG('CODEC ({0}): NOT DETECTED'.format( kodiutil.strRepr(feature.title))) DEBUG_LOG('STREAMDETAILS: {0}'.format(repr( r.get('streamdetails')))) return feature
def addCollectionMovies(self): DBID = kodiutil.intOrZero(xbmc.getInfoLabel('ListItem.DBID')) try: details = rpc.VideoLibrary.GetMovieSetDetails(setid=DBID) for m in details['setdetails']['movies']: try: r = rpc.VideoLibrary.GetMovieDetails( movieid=m['movieid'], properties=[ 'file', 'genre', 'tag', 'mpaa', 'streamdetails', 'title', 'thumbnail', 'runtime', 'year', 'studio', 'director', 'cast' ])['moviedetails'] feature = self.featureFromJSON(r) self.features.append(feature) except: kodiutil.ERROR() except: kodiutil.ERROR() return False return True
def setRatingDefaults(self): ratingSystem = kodiutil.getSetting('rating.system.default', 'MPAA') if not ratingSystem: try: countryCode = self.LANGUAGE.split('-')[1].strip() if countryCode: cinemavision.ratings.setCountry(countryCode) except IndexError: pass except: kodiutil.ERROR() else: cinemavision.ratings.setDefaultRatingSystem(ratingSystem)
def onAction(self, action): try: # print action.getId() if action == xbmcgui.ACTION_MOVE_LEFT: self.moveLeft() elif action == xbmcgui.ACTION_MOVE_RIGHT: self.moveRight() elif action == xbmcgui.ACTION_MOUSE_DRAG: self.dragSlider() else: self.updateItem() except: kodiutil.ERROR() kodigui.BaseDialog.onAction(self, action) return kodigui.BaseDialog.onAction(self, action)
def onAction(self, action): try: if action == xbmcgui.ACTION_CONTEXT_MENU: self.delete() return elif action in (xbmcgui.ACTION_MOVE_UP, xbmcgui.ACTION_MOVE_DOWN, xbmcgui.ACTION_MOUSE_MOVE, xbmcgui.ACTION_MOUSE_WHEEL_UP, xbmcgui.ACTION_MOUSE_WHEEL_DOWN): if self.getFocusId() == self.VIDEOS_LIST_ID: self.moveItem(True) return elif action.getButtonCode() in (61575, 61486): self.delete() except: kodigui.BaseDialog.onAction(self, action) kodiutil.ERROR() return kodigui.BaseDialog.onAction(self, action)
def _load(self, path): try: sData = cinemavision.sequence.SequenceData.load(path) except cinemavision.exceptions.EmptySequenceFileException: xbmcgui.Dialog().ok( T(32573, 'Failed'), 'Failed to read sequence file!', 'Kodi may be unable to read from this location.') return except cinemavision.exceptions.BadSequenceFileException: xbmcgui.Dialog().ok(T(32573, 'Failed'), 'Failed to read sequence file!', 'The sequence file may have been corrupted.') return except: kodiutil.ERROR() xbmcgui.Dialog().ok( T(32573, 'Failed'), 'Failed to read sequence file!', 'There was an unknown error. See kodi.log for details.') return if not sData: xbmcgui.Dialog().ok(T(32601, 'ERROR'), T(32602, 'Error parsing sequence')) return self.sequenceControl.reset() self.fillSequence() self.sequenceData = sData kodiutil.setGlobalProperty('ACTIVE', self.sequenceData.active and '1' or '0') self.addItems(sData) if self.sequenceControl.positionIsValid(1): self.selectSequenceItem(1) self.setFocusId(self.ITEM_OPTIONS_LIST_ID) else: self.selectSequenceItem(0) self.setFocusId(self.ADD_ITEM_LIST_ID) self.modified = False
def getContentPath(from_load=False): contentPath = kodiutil.getPathSetting('content.path') demoPath = os.path.join(kodiutil.PROFILE_PATH, 'demo') if contentPath: kodiutil.setSetting('content.initialized', True) if os.path.exists(demoPath): try: import shutil shutil.rmtree(demoPath) except Exception: kodiutil.ERROR() return contentPath else: if not os.path.exists(demoPath): copyDemoContent() downloadDemoContent() if not from_load: loadContent() return demoPath
def getActiveSequences(active=True, for_dialog=False): contentPath = getSequencesContentPath() if not contentPath: return None sequencesPath = cinemavision.util.pathJoin(contentPath, 'Sequences') sequencePaths = [ cinemavision.util.pathJoin(sequencesPath, p) for p in cinemavision.util.vfs.listdir(sequencesPath) ] sequences = [] for p in sequencePaths: try: s = cinemavision.sequence.SequenceData.load(p) if not active or (s and s.active): if not for_dialog or s.visibleInDialog(): sequences.append(s) except Exception: kodiutil.ERROR('Failed to load: {0}'.format(kodiutil.strRepr(p))) return sequences
def resolveURLFile(path): import YDStreamExtractor as StreamExtractor StreamExtractor.overrideParam('noplaylist', True) StreamExtractor.generateBlacklist( ('.*:(?:user|channel|search)$', '(?i)generic.*')) import xbmcvfs f = xbmcvfs.File(path, 'r') try: url = f.read().strip() except: kodiutil.ERROR() return finally: f.close() vid = StreamExtractor.getVideoInfo(url) if not vid: return None return vid.streamURL()