[Quake2world-dev] r123 - pymp/trunk

pitillo at jdolan.dyndns.org pitillo at jdolan.dyndns.org
Tue Jan 20 15:14:39 UTC 2009


Author: pitillo
Date: 2009-01-20 15:14:39 +0000 (Tue, 20 Jan 2009)
New Revision: 123

Modified:
   pymp/trunk/playlist.py
Log:
Added a new implementation for the random option. Trying to keep track of played songs and respect all other options.

Modified: pymp/trunk/playlist.py
===================================================================
--- pymp/trunk/playlist.py	2009-01-19 23:43:43 UTC (rev 122)
+++ pymp/trunk/playlist.py	2009-01-20 15:14:39 UTC (rev 123)
@@ -35,7 +35,7 @@
 #
 class Playlist:
 	
-	pymp, view, current, counter, history = None, None, None, 1, []
+	pymp, view, current, counter, history, randomlist = None, None, None, 1, [], []
 	continuous, random, repeat = True, False, False
 	loadcount, loadcur = 0, 0
 	
@@ -141,7 +141,7 @@
 		tid = self.view.get_model().get_value(it, COL_TID)
 		target = self.view.get_model().get_value(it, COL_TARGET)
 		title = self.view.get_model().get_value(it, COL_TITLE)
-		
+				
 		self.view.get_model().set(it, COL_WEIGHT_SET, True)  #bold target
 		self.view.scroll_to_cell(path)  #show target
 		
@@ -170,18 +170,63 @@
 			it = model.get_iter_first()
 		else:
 			it = model.get_iter(self.path())
-		
+		# assign it, if not it crashes because wasn't assigned
+		# may be it needs to be fixed better
+		# ind = int(model.get_string_from_iter(it))
 		if self.random:  #disregard step, use random
 			step = random.randint(1, len(model))
+			ind = int(model.get_string_from_iter(it))
+			ind = (ind + step) % len(model)
+			while ind in self.randomlist: #check if was played
+				step = random.randint(1, len(model))
+				ind = int(model.get_string_from_iter(it))
+				ind = (ind + step) % len(model)
+			
+			self.randomlist.append(ind) #add it to the random list
+						
+			if (len(self.randomlist) == len(model)) and not self.repeat:
+				self.randomlist = [] #clean all
+				self.current = None
+				self.history = []
+				try:  #unbold current target in list
+					it = self.view.get_model().get_iter(self.path())
+					self.view.get_model().set(it, COL_WEIGHT_SET, False)
+				except StandardError:
+					pass
+				return self.stop(None, None)
+				
+			if (len(self.randomlist) == len(model)) and self.repeat:
+				self.randomlist = [] #clean all
+				self.history = []
+				if not self.current:  #jump from beginning
+					it = model.get_iter_first()
+				else:
+					it = model.get_iter(self.path())
+				ind = int(model.get_string_from_iter(it))
+				ind = (ind + step) % len(model)		
+				it = model.get_iter(str(ind))
+				path = model.get_path(it)  #resolve path
+				return self.play(path, log, event)
+			
+			it = model.get_iter(str(ind))
+			path = model.get_path(it)  #resolve path
+			return self.play(path, log, event)
 		
+		if not self.continuous:
+			return self.stop(None, None)
+		
+		if self.exhausted() and not self.repeat:
+			self.current = None
+			self.history = []
+			return self.stop(None, None)
+				
 		ind = int(model.get_string_from_iter(it))
-		ind = (ind + step) % len(model)
-		
+		ind = (ind + step) % len(model)		
 		it = model.get_iter(str(ind))
 		
 		path = model.get_path(it)  #resolve path
 		return self.play(path, log, event)
-		
+	
 	#
 	#  Stops the current mplayer job and prevents a jump.
 	#
@@ -194,7 +239,7 @@
 			self.view.get_model().set(it, COL_WEIGHT_SET, False)
 		except StandardError:
 			pass
-		
+				
 		self.pymp.window.set_title(self.pymp.versionString)
 		return True
 		
@@ -216,6 +261,10 @@
 			if tid not in self.history and tid is not self.current:
 				return False
 				
+			if self.randomlist:
+				if tid not in self.randomlist and tid is not self.current:
+					return False
+				
 			it = model.iter_next(it)
 			
 		return True
@@ -488,6 +537,7 @@
 			self.stop(None, None)
 			self.current = None
 			self.history = []
+			self.randomlist = []
 			
 		self.view.get_model().clear()
 		return True



More information about the Quake2World-dev mailing list