def addMusic(self, sItem, queue): mode = sItem.getLive('music') if mode == 'off': return if mode == 'content': queue.music = [ Song(s.path, s.duration) for s in DB.Song.select().order_by(DB.fn.Random()) ] elif mode == 'dir': path = sItem.getLive('musicDir') if not path: return import mutagen mutagen.setFileOpener(util.vfs.File) queue.music = [] for p in util.listFilePaths(path): try: data = mutagen.File(p) except: data = None util.ERROR() d = 0 if data: d = data.info.length queue.music.append(Song(p, d)) random.shuffle(queue.music) elif mode == 'file': path = sItem.getLive('musicFile') if not path: return import mutagen mutagen.setFileOpener(util.vfs.File) data = mutagen.File(path) d = 0 if data: d = data.info.length queue.music = [Song(path, d)] duration = sum([s.duration for s in queue.music]) if duration: # Maybe they were all zero - we'll be here forever :) while duration < queue.duration: for i in range(len(queue.music)): song = queue.music[i] duration += song.duration queue.music.append(song) if duration >= queue.duration: break queue.musicVolume = util.getSettingDefault('trivia.musicVolume') queue.musicFadeIn = util.getSettingDefault('trivia.musicFadeIn') queue.musicFadeOut = util.getSettingDefault('trivia.musicFadeOut')
def addMusic(self, sItem, queue): mode = sItem.getLive('music') if mode == 'off': return if mode == 'content': queue.music = [Song(s.path, s.duration) for s in DB.Song.select().order_by(DB.fn.Random())] elif mode == 'dir': path = sItem.getLive('musicDir') if not path: return import mutagen mutagen.setFileOpener(util.vfs.File) queue.music = [] for p in util.listFilePaths(path): try: data = mutagen.File(p) except: data = None util.ERROR() d = 0 if data: d = data.info.length queue.music.append(Song(p, d)) random.shuffle(queue.music) elif mode == 'file': path = sItem.getLive('musicFile') if not path: return import mutagen mutagen.setFileOpener(util.vfs.File) data = mutagen.File(path) d = 0 if data: d = data.info.length queue.music = [Song(path, d)] duration = sum([s.duration for s in queue.music]) if duration: # Maybe they were all zero - we'll be here forever :) while duration < queue.duration: for i in range(len(queue.music)): song = queue.music[i] duration += song.duration queue.music.append(song) if duration >= queue.duration: break queue.musicVolume = util.getSettingDefault('trivia.musicVolume') queue.musicFadeIn = util.getSettingDefault('trivia.musicFadeIn') queue.musicFadeOut = util.getSettingDefault('trivia.musicFadeOut')
def getSettingDisplay(self, setting): val = getattr(self, setting) limits = self.getLimits(setting) if limits == LIMIT_BOOL_DEFAULT: if val is None: return u'{0} ({1})'.format(T(32322, 'Default'), settingDisplay(util.getSettingDefault('{0}.{1}'.format(self._type, setting)))) return val is True and T(32320, 'Yes') or T(32321, 'No') if val is None or val is 0: return u'{0} ({1})'.format(T(32322, 'Default'), settingDisplay(util.getSettingDefault('{0}.{1}'.format(self._type, setting)))) return unicode(settingDisplay(val))
def DBChoices(attr): default = util.getSettingDefault('rating.system.default') import ratings system = ratings.getRatingsSystem(default) if not system: return None return [(u'{0}.{1}'.format(r.system, r.name), str(r)) for r in system.ratings]
def __call__(self, caller, sItem): self.caller = caller self.sItem = sItem source = sItem.getLive('source') count = sItem.getLive('count') playables = [] if source == 'content': scrapers.setContentPath(self.caller.contentPath) util.DEBUG_LOG('[{0}] {1} x {2}'.format(self.sItem.typeChar, source, count)) scrapersList = (sItem.getLive('scrapers') or '').split(',') if util.getSettingDefault('trailer.preferUnwatched'): scrapersInfo = [(s.strip(), True, False) for s in scrapersList] scrapersInfo += [(s.strip(), False, True) for s in scrapersList] else: scrapersInfo = [(s.strip(), True, True) for s in scrapersList] for scraper, unwatched, watched in scrapersInfo: util.DEBUG_LOG(' - [{0}]'.format(scraper)) playables += self.scraperHandler(scraper, count, unwatched=unwatched, watched=watched) count -= min(len(playables), count) if count <= 0: break elif source == 'dir' or source == 'content': playables = self.dirHandler(sItem) elif source == 'file': playables = self.fileHandler(sItem) if not playables: util.DEBUG_LOG(' - NOT SHOWING') return playables
def defaultHandler(self, sItem): is3D = self.caller.nextQueuedFeature.is3D and sItem.play3D if sItem.random: util.DEBUG_LOG(' - Random') bumpers = [x for x in DB.VideoBumpers.select().where((DB.VideoBumpers.type == sItem.vtype) & (DB.VideoBumpers.is3D == is3D))] bumpers = random.sample(bumpers, min(sItem.count, len(bumpers))) bumpers = [Video(bumper.path, volume=sItem.getLive('volume')).fromModule(sItem) for bumper in bumpers] if not bumpers and is3D and util.getSettingDefault('bumper.fallback2D'): util.DEBUG_LOG(' - Falling back to 2D bumper') bumpers = [x for x in DB.VideoBumpers.select().where((DB.VideoBumpers.type == sItem.vtype))] bumpers = random.sample(bumpers, min(sItem.count, len(bumpers))) bumpers = [Video(bumper.path, volume=sItem.getLive('volume')).fromModule(sItem) for bumper in bumpers] if not bumpers: util.DEBUG_LOG(' - No matches!') return bumpers else: util.DEBUG_LOG(' - Via source') if sItem.source: return [Video(sItem.source, volume=sItem.getLive('volume')).fromModule(sItem)] else: util.DEBUG_LOG(' - Empty path!') return []
def DBChoices(attr): import database as DB DB.initialize() ratingSystem = util.getSettingDefault('rating.system.default') DB.connect() try: return [ (x.style, x.style) for x in DB.RatingsBumpers.select(DB.fn.Distinct(DB.RatingsBumpers.style)).where(DB.RatingsBumpers.system == ratingSystem) ] finally: DB.close()
def DBChoices(attr): import database as DB DB.initialize() ratingSystem = util.getSettingDefault('rating.system.default') DB.connect() try: return [(x.style, x.style) for x in DB.RatingsBumpers.select( DB.fn.Distinct(DB.RatingsBumpers.style)).where( DB.RatingsBumpers.system == ratingSystem)] finally: DB.close()
def defaultHandler(self, sItem): is3D = self.caller.nextQueuedFeature.is3D and sItem.play3D if sItem.random: util.DEBUG_LOG(' - Random') bumpers = [ x for x in DB.VideoBumpers.select().where( (DB.VideoBumpers.type == sItem.vtype) & (DB.VideoBumpers.is3D == is3D)) ] bumpers = random.sample(bumpers, min(sItem.count, len(bumpers))) bumpers = [ Video(bumper.path, volume=sItem.getLive('volume')).fromModule(sItem) for bumper in bumpers ] if not bumpers and is3D and util.getSettingDefault( 'bumper.fallback2D'): util.DEBUG_LOG(' - Falling back to 2D bumper') bumpers = [ x for x in DB.VideoBumpers.select().where(( DB.VideoBumpers.type == sItem.vtype)) ] bumpers = random.sample(bumpers, min(sItem.count, len(bumpers))) bumpers = [ Video(bumper.path, volume=sItem.getLive('volume')).fromModule(sItem) for bumper in bumpers ] if not bumpers: util.DEBUG_LOG(' - No matches!') return bumpers else: util.DEBUG_LOG(' - Via source') if sItem.source: return [ Video(sItem.source, volume=sItem.getLive('volume')).fromModule(sItem) ] else: util.DEBUG_LOG(' - Empty path!') return []
def loadSequence(self, sequence_path): self.sequence = sequence.loadSequence(sequence_path) if util.DEBUG: # Dump some info util.DEBUG_LOG('') util.DEBUG_LOG('[- Non-Module Defaults -]') for sett in ( 'bumper.fallback2D', 'trivia.music', 'trivia.musicVolume', 'trivia.musicFadeIn', 'trivia.musicFadeOut', 'trailer.preferUnwatched', 'trailer.ratingMax', 'rating.system.default' ): util.DEBUG_LOG('{0}: {1}'.format(sett, repr(util.getSettingDefault(sett)))) util.DEBUG_LOG('') for si in self.sequence: util.DEBUG_LOG('[- {0} -]'.format(si._type)) for e in si._elements: util.DEBUG_LOG('{0}: {1}'.format(e['attr'], repr(si.getLive(e['attr'])))) util.DEBUG_LOG('')
def loadSequence(self, sequence_path): self.sequence = sequence.loadSequence(sequence_path) if util.DEBUG: # Dump some info util.DEBUG_LOG('') util.DEBUG_LOG('[- Non-Module Defaults -]') for sett in ('bumper.fallback2D', 'trivia.music', 'trivia.musicVolume', 'trivia.musicFadeIn', 'trivia.musicFadeOut', 'trailer.preferUnwatched', 'trailer.ratingMax', 'rating.system.default'): util.DEBUG_LOG('{0}: {1}'.format( sett, repr(util.getSettingDefault(sett)))) util.DEBUG_LOG('') for si in self.sequence: util.DEBUG_LOG('[- {0} -]'.format(si._type)) for e in si._elements: util.DEBUG_LOG('{0}: {1}'.format( e['attr'], repr(si.getLive(e['attr'])))) util.DEBUG_LOG('')
def getLive(self, attr): if not attr == 'musicDir' or self.music is not None: return Item.getLive(self, attr) return util.getSettingDefault('{0}.{1}'.format(self._type, attr))
def globalDefault(self, attr): return util.getSettingDefault('{0}.{1}'.format(self._type, attr))
def getLive(self, attr): val = self.getSetting(attr) if val is None or val is 0: return util.getSettingDefault('{0}.{1}'.format(self._type, attr)) return val
def __call__(self, caller, sItem): bumper = None method = sItem.getLive('method') fallback = sItem.getLive('fallback') format_ = sItem.getLive('format') util.DEBUG_LOG('[{0}] Method: {1} Fallback: {2} Format: {3}'.format(sItem.typeChar, method, fallback, format_)) is3D = caller.nextQueuedFeature.is3D and sItem.play3D if method == 'af.detect': util.DEBUG_LOG(' - Detect') if caller.nextQueuedFeature.audioFormat: try: bumper = random.choice( [x for x in DB.AudioFormatBumpers.select().where( (DB.AudioFormatBumpers.format == caller.nextQueuedFeature.audioFormat) & (DB.AudioFormatBumpers.is3D == is3D) )] ) util.DEBUG_LOG(' - Detect: Using bumper based on feature codec info ({0})'.format(repr(caller.nextQueuedFeature.title))) except IndexError: util.DEBUG_LOG(' - Detect: No codec matches!') if is3D and util.getSettingDefault('bumper.fallback2D'): try: bumper = random.choice( [x for x in DB.AudioFormatBumpers.select().where(DB.AudioFormatBumpers.format == caller.nextQueuedFeature.audioFormat)] ) util.DEBUG_LOG( ' - Using bumper based on feature codec info and falling back to 2D ({0})'.format(repr(caller.nextQueuedFeature.title)) ) except IndexError: pass else: util.DEBUG_LOG(' - No feature audio format!') if ( format_ and not bumper and ( method == 'af.format' or ( method == 'af.detect' and fallback == 'af.format' ) ) ): util.DEBUG_LOG(' - Format') try: bumper = random.choice( [x for x in DB.AudioFormatBumpers.select().where( (DB.AudioFormatBumpers.format == format_) & (DB.AudioFormatBumpers.is3D == is3D) )] ) util.DEBUG_LOG(' - Format: Using bumper based on setting ({0})'.format(repr(caller.nextQueuedFeature.title))) except IndexError: util.DEBUG_LOG(' - Format: No matches!') if is3D and util.getSettingDefault('bumper.fallback2D'): try: bumper = random.choice([x for x in DB.AudioFormatBumpers.select().where(DB.AudioFormatBumpers.format == format_)]) util.DEBUG_LOG(' - Using bumper based on format setting and falling back to 2D ({0})'.format(repr(caller.nextQueuedFeature.title))) except IndexError: pass if ( sItem.getLive('file') and not bumper and ( method == 'af.file' or ( method == 'af.detect' and fallback == 'af.file' ) ) ): util.DEBUG_LOG(' - File: Using bumper based on setting ({0})'.format(repr(caller.nextQueuedFeature.title))) return [Video(sItem.getLive('file'), volume=sItem.getLive('volume')).fromModule(sItem)] if bumper: return [Video(bumper.path, volume=sItem.getLive('volume')).fromModule(sItem)] util.DEBUG_LOG(' - NOT SHOWING') return []
def __call__(self, caller, sItem): bumper = None method = sItem.getLive('method') fallback = sItem.getLive('fallback') format_ = sItem.getLive('format') util.DEBUG_LOG('[{0}] Method: {1} Fallback: {2} Format: {3}'.format( sItem.typeChar, method, fallback, format_)) is3D = caller.nextQueuedFeature.is3D and sItem.play3D if method == 'af.detect': util.DEBUG_LOG(' - Detect') audioFormat = self._checkFileNameForFormat( caller.nextQueuedFeature) if audioFormat: try: bumper = random.choice([ x for x in DB.AudioFormatBumpers.select().where( (DB.AudioFormatBumpers.format == audioFormat) & (DB.AudioFormatBumpers.is3D == is3D)) ]) util.DEBUG_LOG( ' - Detect: Using bumper based on feature codec info ({0})' .format(repr(caller.nextQueuedFeature.title))) except IndexError: util.DEBUG_LOG(' - Detect: No codec matches!') if is3D and util.getSettingDefault('bumper.fallback2D'): try: bumper = random.choice([ x for x in DB.AudioFormatBumpers.select().where( DB.AudioFormatBumpers.format == audioFormat) ]) util.DEBUG_LOG( ' - Using bumper based on feature codec info and falling back to 2D ({0})' .format(repr(caller.nextQueuedFeature.title))) except IndexError: pass else: util.DEBUG_LOG(' - No feature audio format!') if (format_ and not bumper and (method == 'af.format' or (method == 'af.detect' and fallback == 'af.format'))): util.DEBUG_LOG(' - Format') try: bumper = random.choice([ x for x in DB.AudioFormatBumpers.select().where( (DB.AudioFormatBumpers.format == format_) & (DB.AudioFormatBumpers.is3D == is3D)) ]) util.DEBUG_LOG( ' - Format: Using bumper based on setting ({0})'.format( repr(caller.nextQueuedFeature.title))) except IndexError: util.DEBUG_LOG(' - Format: No matches!') if is3D and util.getSettingDefault('bumper.fallback2D'): try: bumper = random.choice([ x for x in DB.AudioFormatBumpers.select().where( DB.AudioFormatBumpers.format == format_) ]) util.DEBUG_LOG( ' - Using bumper based on format setting and falling back to 2D ({0})' .format(repr(caller.nextQueuedFeature.title))) except IndexError: pass if (sItem.getLive('file') and not bumper and (method == 'af.file' or (method == 'af.detect' and fallback == 'af.file'))): util.DEBUG_LOG( ' - File: Using bumper based on setting ({0})'.format( repr(caller.nextQueuedFeature.title))) return [ Video(sItem.getLive('file'), volume=sItem.getLive('volume')).fromModule(sItem) ] if bumper: return [ Video(bumper.path, volume=sItem.getLive('volume')).fromModule(sItem) ] util.DEBUG_LOG(' - NOT SHOWING') return []