view vixm/ @ 46:2d570448aba5 pure

Abstract out the stats code a little bit more This is in preparation for moving the stats code completely out of player code
author Josef "Jeff" Sipek <>
date Mon, 06 Nov 2006 05:19:23 -0500
parents 06b5a7db3d19
children 3eee483b5c4e
line wrap: on
line source

# - playlist interface
# Copyright (C) 2006  Josef "Jeff" Sipek <>
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 as
# published by the Free Software Foundation.

import random, re


class playlist:
	def __init__(self, allowrandom=False):
		self.__list = []
		self.__allowrand = allowrandom # allow randomization of this list
		self.__cursor = 0
	def enqueue(self, song):
		""" Append a song to the list """
	def dequeue(self, song):
		""" Remove a song from the list """
	def pop(self):
		""" Pop the next song """
		return self.__list.pop(0)

	def __rnd(self):
		return random.randint(0, len(self.__list)-1)

	def next(self):
		""" Get the next song """
		idx = self.__cursor

		if not self.__allowrand:
			self.__cursor += 1
			if self.__cursor >= len(self.__list):
				self.__cursor = 0
			self.__cursor = self.__rnd()

		return self.__list[idx]

	def __getitem__(self, i):
		""" Get item at position i """
		return self.__list[i]

	def __len__(self):
		""" Return the length of the playlist """
		return len(self.__list)

	def search(self, regexp):
		""" Yield all the songs matching regexp """
		for song in self.__list:
			if, str(song), re.IGNORECASE):
				yield song

	def index(self, song):
		""" Returns the index of the first occurence of song """
		return self.__list.index(song)