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')
Ejemplo n.º 3
0
    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))
Ejemplo n.º 4
0
    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))
Ejemplo n.º 5
0
 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]
Ejemplo n.º 6
0
 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 []
Ejemplo n.º 9
0
    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()
Ejemplo n.º 10
0
    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 __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 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('')
Ejemplo n.º 15
0
    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))
Ejemplo n.º 16
0
 def globalDefault(self, attr):
     return util.getSettingDefault('{0}.{1}'.format(self._type, attr))
Ejemplo n.º 17
0
 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
Ejemplo n.º 18
0
    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 __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 []
Ejemplo n.º 20
0
 def globalDefault(self, attr):
     return util.getSettingDefault('{0}.{1}'.format(self._type, attr))
Ejemplo n.º 21
0
 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')
            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 []