Exemplo n.º 1
0
class TrackThreader():
	def __init__(self):
		self.track = None
		self.onEndCustomCallback = None
		self.volume = volumizer.getJSON()['config']['milli']

	def __play_track(self, track, callback = None):
		self.setVolume(volumizer.getJSON()['config']['milli'])
		if(callback == None):
			track.play()
		else:
			callback(track)
		self.__oversee_track(track)
	
	#This makes track to disapear after it's done playing
	def __oversee_track(self, track):
		while (track.isBusy() or track.isPaused()) and not track.shouldEnd():
			continue
		if(self.onEndCustomCallback == None):
			if(self.track != None):
				print(self.track.getPath() + " finished playing.")
			self.setTrack(None)
		else:
			self.__play_track(track, self.onEndCustomCallback)

	def getThread(self, path):
		self.track = Track(path, self.volume)
		self.playingThread = threading.Thread(target = self.__play_track, args=(self.track, ))
		self.playingThread.daemon = True
		return {'thread' : self.playingThread,
				'track' : self.track}

	def currentTrack(self):
		return self.track

	def setTrack(self, track):
		self.track = track

	def setVolume(self, volume):
		self.volume = volume
		if self.track != None:
			self.track.setVolume(volume)

	def registerOnEndCustomCallback(self, callback):
		self.onEndCustomCallback = callback
Exemplo n.º 2
0
class Playlist:

	def __init__(self, tracks, volume = 1):
		self.position = -1
		self.threadCount = len(tracks)
		self.volume = volume
		self.currentTrack = None
		self.tracks = tracks

	def loadTracks(self, tracks):
		self.tracks = tracks
		self.threadCount = len(tracks)

	def play(self, position = 0, onError = None):
		if len(self.tracks) > 0 and len(self.tracks) > position:
			self.position = position
			if onError == None:
				self.currentTrack = Track(self.tracks[self.position])
			else:
				self.currentTrack = Track(self.tracks[self.position], onError)
			self.currentTrack.setVolume(self.volume)
			self.currentTrack.play()
		else:
			raise IndexError('Wrong track position')

	def nextTrack(self, onError = None):
		if onError != None:
			self.play(self.position + 1, onError)
		else:
			self.play(self.position + 1)

	def previousTrack(self, onError = None):
		if onError != None:
			self.play(self.position - 1, onError)
		else:
			self.play(self.position - 1)

	def nextTrackAvilable(self):
		if len(self.tracks) > self.position + 1:
			return True
		return False

	def prevTrackAvilable(self):
		if len(self.tracks) > 0 and self.position - 1 >= 0:
			return True
		return False

	def setVolume(self, volume):
		if(volume > 1):
			volume = 1
		elif(volume < 0):
			volume = 0
		self.volume = volume
		self.currentTrack.setVolume(volume)

	def pause(self):
		self.currentTrack.pause()

	def unpause(self):
		self.currentTrack.unpause()

	def stop(self):
		self.currentTrack.stop()

	def isPaused(self):
		return self.currentTrack.isPaused()

	def isMuted(self):
		if self.currentTrack != None:
			return self.currentTrack.isMuted()
		return False

	def getVolume(self):
		return self.volume

	def isPlaying(self):
		if self.currentTrack != None:
			return self.currentTrack.isPlaying()
		return None

	def isPaused(self):
		if self.currentTrack != None:
			return self.currentTrack.isPaused()
		return None


	def getPosition(self):
		return self.position;

	def dispose(self):
		self.currentTrack.dispose()

	def onTrackEnd(self, callback):
		callback(self.position)

	def getTracks(self):
		return self.tracks

	def playbackInfo(self, code):

		base_response = {
							'code' : code,
							'position' : self.position,
							'total' : len(self.tracks)
						}

		base_response.update(self.currentTrack.playbackInfo())

		response = {'playlist' : base_response }

		return response

	def shouldGoNext(self):
		data = self.currentTrack.playbackInfo()
		current = self.currentTrack.getPlaybackPosition()
		total = data.get('playback').get('total').get('millis')

		if current >= total or current == -1:
			return True
		return False