def addSongs(self, base, file, sub=None): path = util.pathJoin(base, file) if util.isDir(path): paths = util.vfs.listdir(path) sub = sub and (sub + ':' + file) or file for p in paths: self.addSongs(path, p, sub) return name, ext = os.path.splitext(file) if ext.lower() in util.musicExtensions: if sub: name = sub + ':' + name try: DB.Song.get(DB.Song.path == path) self.owner.log('Loading Song (exists): [ {0} ]'.format(util.strRepr(name))) except DB.peewee.DoesNotExist: data = None try: data = mutagen.File(path) except: util.ERROR() if data: duration = data.info.length self.owner.log('Loading Song (new): [ {0} ({1}) ]'.format(util.strRepr(name), data.info.pprint())) else: duration = 0 DB.Song.create( path=path, name=name, duration=duration )
def createBumpers(self, basePath, model, type_name, sub_name, pct_start, sub_default=''): paths = util.vfs.listdir(basePath) total = float(len(paths)) for ct, sub in enumerate(paths): pct = pct_start + int((ct / total) * 20) if not self._callback(pct=pct): break path = util.pathJoin(basePath, sub) if not util.isDir(path): continue if sub.startswith('_Exclude'): util.DEBUG_LOG('SKIPPING EXCLUDED DIR: {0}'.format( util.strRepr(sub))) continue if util.vfs.exists(util.pathJoin(path, 'system.xml')): # For ratings self.loadRatingSystem(util.pathJoin(path, 'system.xml')) type_ = sub.replace(' Bumpers', '') self.addBumper(model, sub, path, type_name, sub_name, type_, sub_default)
def addBumper(self, model, sub, path, type_name, sub_name, type_, sub_default, sub_val=None, prefix=None): for v in util.vfs.listdir(path): vpath = util.pathJoin(path, v) if util.isDir(vpath): if sub_name: if not sub_val: self.addBumper(model, sub, vpath, type_name, sub_name, type_, sub_default, v) else: self.addBumper(model, sub, vpath, type_name, sub_name, type_, sub_default, prefix=v) continue name, ext = os.path.splitext(v) is3D = '3D' in name if is3D and type_name == 'system': # Remove tags from rating bumpers name = re.sub(CONTENT_3D_RE, '', name).strip() isImage = False if ext in util.videoExtensions: isImage = False elif ext in util.imageExtensions: isImage = True else: continue name = prefix and (prefix + ':' + name) or name defaults = { type_name: TYPE_IDS.get(type_, type_), 'name': name, 'is3D': is3D, 'isImage': isImage } if sub_name: sub_val = sub_val or sub_default defaults[sub_name] = sub_val self.log('Loading {0} ({1} - {2}): [ {3}{4} ]'.format(model.__name__, util.strRepr(sub), sub_val, util.strRepr(name), is3D and ': 3D' or '')) else: self.log('Loading {0} ({1}): [ {2}{3} ]'.format(model.__name__, util.strRepr(sub), util.strRepr(name), is3D and ': 3D' or '')) model.get_or_create( path=vpath, defaults=defaults )
def loadTrivia(self): self.logHeading('LOADING TRIVIA') basePath = util.pathJoin(self._contentDirectory, 'Trivia') paths = util.vfs.listdir(basePath) total = float(len(paths)) for ct, sub in enumerate(paths): pct = 20 + int((ct / total) * 20) if not self._callback(pct=pct): break path = os.path.join(basePath, sub) if util.isDir(path): if sub.startswith('_Exclude'): util.DEBUG_LOG('SKIPPING EXCLUDED DIR: {0}'.format(util.strRepr(sub))) continue else: continue self.log('Processing trivia: {0}'.format(util.strRepr(os.path.basename(path)))) self.triviaDirectoryHandler(path, prefix=sub)
def loadTrivia(self): self.logHeading('LOADING TRIVIA') basePath = util.pathJoin(self._contentDirectory, 'Trivia') paths = util.vfs.listdir(basePath) total = float(len(paths)) for ct, sub in enumerate(paths): pct = 20 + int((ct/total)*20) if not self._callback(pct=pct): break path = os.path.join(basePath, sub) if util.isDir(path): if sub.startswith('_Exclude'): util.DEBUG_LOG('SKIPPING EXCLUDED DIR: {0}'.format(util.strRepr(sub))) continue else: continue self.log('Processing trivia: {0}'.format(util.strRepr(os.path.basename(path)))) self.triviaDirectoryHandler(path, prefix=sub)
def createBumpers(self, basePath, model, type_name, sub_name, pct_start, sub_default=''): paths = util.vfs.listdir(basePath) total = float(len(paths)) for ct, sub in enumerate(paths): pct = pct_start + int((ct/total)*20) if not self._callback(pct=pct): break path = util.pathJoin(basePath, sub) if not util.isDir(path): continue if sub.startswith('_Exclude'): util.DEBUG_LOG('SKIPPING EXCLUDED DIR: {0}'.format(util.strRepr(sub))) continue if util.vfs.exists(util.pathJoin(path, 'system.xml')): # For ratings self.loadRatingSystem(util.pathJoin(path, 'system.xml')) type_ = sub.replace(' Bumpers', '') self.addBumper(model, sub, path, type_name, sub_name, type_, sub_default)
def doCall(self, basePath, prefix=None): hasSlidesXML = False slideXML = util.pathJoin(basePath, self._formatXML) if util.vfs.exists(slideXML): hasSlidesXML = True # pack = os.path.basename(basePath.rstrip('\\/')) xml = None slide = None if hasSlidesXML: try: f = util.vfs.File(slideXML, 'r') xml = f.read() finally: f.close() try: slides = ET.fromstring(xml) slide = slides.find('slide') except ET.ParseError: util.DEBUG_LOG('Bad slides.xml') except: util.ERROR() slide = None if slide: rating = self.getNodeAttribute(slide, self._ratingNA[0], self._ratingNA[1]) or '' questionRE = (self.getNodeAttribute(slide, self._questionNA[0], self._questionNA[1]) or '').replace('N/A', '') clueRE = self.getNodeAttribute(slide, self._clueNA[0], self._clueNA[1]) or ''.replace('N/A', '') answerRE = self.getNodeAttribute(slide, self._answerNA[0], self._answerNA[1]) or ''.replace('N/A', '') else: rating = '' questionRE = self._defaultQRegEx clueRE = self._defaultCRegEx answerRE = self._defaultARegEx contents = util.vfs.listdir(basePath) trivia = {} for c in contents: path = util.pathJoin(basePath, c) if util.isDir(path): self.doCall(path, prefix=prefix and (prefix + ':' + c) or c) continue base, ext = os.path.splitext(c) if not ext.lower() in util.imageExtensions: if ext.lower() in util.videoExtensions: self.getSlide(basePath, c, prefix) continue ttype = '' clueCount = 0 ext = ext.lstrip('.') if re.search(questionRE, c): name = re.split(questionRE, c)[0] + ':{0}'.format(ext) ttype = 'q' elif re.search(answerRE, c): name = re.split(answerRE, c)[0] + ':{0}'.format(ext) ttype = 'a' elif re.search(clueRE, c): name = re.split(clueRE, c)[0] + ':{0}'.format(ext) try: clueCount = re.search(clueRE, c).group(1) except: pass ttype = 'c' else: # A still name, ext_ = os.path.splitext(c) name += ':{0}'.format(ext) # name = re.split(clueRE, c)[0] ttype = 'a' if name not in trivia: trivia[name] = {'q': None, 'c': {}, 'a': None} if ttype == 'q' or ttype == 'a': trivia[name][ttype] = path elif ttype == 'c': trivia[name]['c'][clueCount] = path for name, data in trivia.items(): questionPath = data['q'] answerPath = data['a'] if not answerPath: continue if questionPath: ttype = 'QA' self._callback('Loading Trivia (QA): [ {0} ]'.format(util.strRepr(name))) else: ttype = 'fact' self._callback('Loading Trivia (single): [ {0} ]'.format(util.strRepr(name))) defaults = { 'type': ttype, 'TID': u'{0}:{1}'.format(prefix, name), 'name': name, 'rating': rating, 'questionPath': questionPath } for ct, key in enumerate(sorted(data['c'].keys())): defaults['cluePath{0}'.format(ct)] = data['c'][key] try: DB.Trivia.get_or_create( answerPath=answerPath, defaults=defaults ) except: util.DEBUG_LOG(repr(data)) util.DEBUG_LOG(repr(defaults)) util.ERROR()
def __call__(self, basePath, prefix=None): hasSlidesXML = False slideXML = util.pathJoin(basePath, self._formatXML) if util.vfs.exists(slideXML): hasSlidesXML = True # pack = os.path.basename(basePath.rstrip('\\/')) xml = None slide = None if hasSlidesXML: try: f = util.vfs.File(slideXML, 'r') xml = f.read() finally: f.close() try: slides = ET.fromstring(xml) slide = slides.find('slide') except ET.ParseError: util.DEBUG_LOG('Bad slides.xml') except: util.ERROR() slide = None if slide: rating = self.getNodeAttribute(slide, self._ratingNA[0], self._ratingNA[1]) or '' questionRE = (self.getNodeAttribute(slide, self._questionNA[0], self._questionNA[1]) or '').replace('N/A', '') clueRE = self.getNodeAttribute(slide, self._clueNA[0], self._clueNA[1]) or ''.replace('N/A', '') answerRE = self.getNodeAttribute(slide, self._answerNA[0], self._answerNA[1]) or ''.replace('N/A', '') else: rating = '' questionRE = self._defaultQRegEx clueRE = self._defaultCRegEx answerRE = self._defaultARegEx contents = util.vfs.listdir(basePath) trivia = {} for c in contents: path = util.pathJoin(basePath, c) if util.isDir(path): self(path, prefix=prefix and (prefix + ':' + c) or c) continue base, ext = os.path.splitext(c) if not ext.lower() in util.imageExtensions: if ext.lower() in util.videoExtensions: self.getSlide(basePath, c, prefix) continue ttype = '' clueCount = 0 if re.search(questionRE, c): name = re.split(questionRE, c)[0] ttype = 'q' elif re.search(answerRE, c): name = re.split(answerRE, c)[0] ttype = 'a' elif re.search(clueRE, c): name = re.split(clueRE, c)[0] try: clueCount = re.search(clueRE, c).group(1) except: pass ttype = 'c' else: # A still name, ext = os.path.splitext(c) # name = re.split(clueRE, c)[0] ttype = 'a' if name not in trivia: trivia[name] = {'q': None, 'c': {}, 'a': None} if ttype == 'q' or ttype == 'a': trivia[name][ttype] = path elif ttype == 'c': trivia[name]['c'][clueCount] = path for name, data in trivia.items(): questionPath = data['q'] answerPath = data['a'] if not answerPath: continue if questionPath: ttype = 'QA' self._callback('Loading Trivia(QA): [ {0} ]'.format(util.strRepr(name))) else: ttype = 'fact' self._callback('Loading Trivia(single): [ {0} ]'.format(util.strRepr(name))) defaults = { 'type': ttype, 'TID': u'{0}:{1}'.format(prefix, name), 'name': name, 'rating': rating, 'questionPath': questionPath } for ct, key in enumerate(sorted(data['c'].keys())): defaults['cluePath{0}'.format(ct)] = data['c'][key] try: DB.Trivia.get_or_create( answerPath=answerPath, defaults=defaults ) except: print repr(data) util.ERROR()