コード例 #1
0
ファイル: playorder.py プロジェクト: neurowarin/quodlibet
 def __compose_order(self):
     old_order = self.order
     repeat_cls = self.__get_repeat_class()
     shuffle_cls = self.__get_shuffle_class()
     shuffler = (shuffle_cls() if self.shuffled else OrderInOrder())
     self.order = repeat_cls(shuffler) if self.repeated else shuffler
     print_d("Updating %s order to %s"
             % (type(self.__playlist).__name__, self.order))
     self.__playlist.order = self.order
     self.__player.replaygain_profiles[2] = shuffler.replaygain_profiles
     self.__player.reset_replaygain()
     if self.order != old_order:
         self.emit('changed')
コード例 #2
0
ファイル: follow.py プロジェクト: tonydolan/quodlibet
    def next(self, playlist, iter):
        next_fallback = OrderInOrder.next(self, playlist, iter)
        OrderRemembered.next(self, playlist, iter)

        selected = app.window.songlist.get_selected_songs()
        if not selected:
            return next_fallback

        selected_iter = playlist.find(selected[0])
        selected_path = playlist.get_path(selected_iter)
        current_path = iter and playlist.get_path(iter)

        if selected_path in (current_path, self.__last_path):
            return next_fallback

        self.__last_path = selected_path
        return selected_iter
コード例 #3
0
    def _next(self, playlist, current_song, delay_on=True):
        grouping = str(pconfig.gettext("grouping")).strip()
        grouping_filter = str(pconfig.gettext("grouping_filter")).strip()
        delay = pconfig.getint("delay")

        def same_group(song_iter_a, song_iter_b):
            if song_iter_a is None or song_iter_b is None:
                return False
            song_a = playlist.get_value(song_iter_a)
            song_b = playlist.get_value(song_iter_b)
            if not self._tag_defined(grouping_filter, song_a):
                return False
            if not self._tag_defined(grouping_filter, song_b):
                return False
            return song_a(grouping) == song_b(grouping)

        # Keep track of played songs
        OrderRemembered.next(self, playlist, current_song)
        remaining = OrderRemembered.remaining(self, playlist)

        # Check if playlist is finished or empty
        if not remaining:
            OrderRemembered.reset(self, playlist)
            return None

        # Play next song in current grouping
        next_song = OrderInOrder.next(self, playlist, current_song)
        if same_group(next_song, current_song):
            return next_song

        # Pause for a moment before picking new group
        if delay_on:
            self._resume_after_delay(delay)

        # Pick random song at the start of a new group
        while True:
            song_location = random.choice(list(remaining.keys()))
            new_song = playlist.get_iter(song_location)
            new_song_prev = (playlist.get_iter(song_location - 1)
                             if song_location >= 1 else None)
            if not same_group(new_song, new_song_prev):
                return new_song
コード例 #4
0
    def _next(self, playlist, current_song, delay_on=True):
        grouping = str(pconfig.gettext("grouping")).strip()
        grouping_filter = str(pconfig.gettext("grouping_filter")).strip()
        delay = pconfig.getint("delay")

        def same_group(song_iter_a, song_iter_b):
            if song_iter_a is None or song_iter_b is None:
                return False
            song_a = playlist.get_value(song_iter_a)
            song_b = playlist.get_value(song_iter_b)
            if not self._tag_defined(grouping_filter, song_a):
                return False
            if not self._tag_defined(grouping_filter, song_b):
                return False
            return song_a(grouping) == song_b(grouping)

        # Keep track of played songs
        OrderRemembered.next(self, playlist, current_song)
        remaining = OrderRemembered.remaining(self, playlist)

        # Check if playlist is finished or empty
        if not remaining:
            OrderRemembered.reset(self, playlist)
            return None

        # Play next song in current grouping
        next_song = OrderInOrder.next(self, playlist, current_song)
        if same_group(next_song, current_song):
            return next_song

        # Pause for a moment before picking new group
        if delay_on:
            self._resume_after_delay(delay)

        # Pick random song at the start of a new group
        while True:
            song_location = random.choice(list(remaining.keys()))
            new_song = playlist.get_iter(song_location)
            new_song_prev = (playlist.get_iter(song_location - 1)
                             if song_location >= 1 else None)
            if not same_group(new_song, new_song_prev):
                return new_song
コード例 #5
0
 def test_remaining(self):
     order = OneSong(OrderInOrder())
     pl = PlaylistModel(OrderInOrder)
     pl.set([r0, r1])
     for i in range(2):
         self.failUnlessEqual(order.next(pl, pl.current_iter), None)