Changeset 50

Show
Ignore:
Timestamp:
02/25/06 20:03:26 (3 years ago)
Author:
nicfit
Message:

Playlist shuffle, closes [1]

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/src/mesk/playlist.py

    r44 r50  
    110110    def set_shuffle(self, state): 
    111111        self._shuffle = state 
     112        self._history = [] 
    112113 
    113114    def reset(self, start_idx = None): 
     
    134135 
    135136    def has_next(self): 
    136         return self._repeat or (self._curr_idx + 1 < self.get_length()) 
     137        if self._repeat or self._queue: 
     138            return True 
     139        elif self._shuffle: 
     140            return len(self._history) < len(self._sources) 
     141        else: 
     142            return (self._curr_idx + 1) < self.get_length() 
    137143 
    138144    def has_prev(self): 
     
    160166            return None 
    161167 
    162         if self._shuffle: 
    163             # TODO 
    164             pass 
     168        if self._queue: 
     169            next = self._queue.pop(0) 
     170            self._curr_idx = next 
     171            next = self._sources[next] 
     172        elif self._shuffle: 
     173            all = set(range(self.get_length())) 
     174            played = set(self._history) 
     175            choices = list(all.difference(played)) 
     176            if not choices and self._repeat: 
     177                self.reset() 
     178                return self.get_next() 
     179            elif not choices: 
     180                next = None 
     181            else: 
     182                next = random.choice(choices) 
     183                self._history.append(next) 
     184                self._curr_idx = next 
     185                next = self._sources[next] 
    165186        else: 
    166187            next = self._curr_idx + 1 
     
    174195                next = None 
    175196             
     197        if next is None: 
     198            self.reset() 
    176199        return next 
    177200 
     
    185208                prev = None 
    186209            else: 
    187                 prev_idx = \ 
    188                     self._history.pop(len(self._history) - 1) 
     210                prev_idx = self._history.pop() 
     211                if prev_idx == self._curr_idx and self._history: 
     212                    prev_idx = self._history.pop() 
    189213                self._curr_idx = prev_idx 
    190214                prev = self._sources[prev_idx] 
     
    200224                prev = None 
    201225 
     226        if prev is None: 
     227            self.reset() 
    202228        return prev 
    203229 
  • trunk/src/mesk/utils.py

    r48 r50  
    11################################################################################ 
    22#  Copyright (C) 2006  Travis Shirk <travis@pobox.com> 
    3 ## Copyright (C) 2005  Nikos Kouremenos <nkour@jabber.org> 
    4 ## Copyright (C) 2005  Dimitur Kirov <dkirov@gmail.com> 
     3# Copyright (C) 2005  Nikos Kouremenos <nkour@jabber.org> 
     4# Copyright (C) 2005  Dimitur Kirov <dkirov@gmail.com> 
    55# 
    66#  This program is free software; you can redistribute it and/or modify