Mercurial > vixm
view vixm/player.py @ 51:8396cc3816ee pure tip
On shutdown, make sure we tell the dbus clients that we're done
author | Josef "Jeff" Sipek <jeffpc@josefsipek.net> |
---|---|
date | Mon, 06 Nov 2006 06:16:19 -0500 |
parents | 2d570448aba5 |
children |
line wrap: on
line source
import time, os from threading import Thread import mad, ao import playlist, stats, rb_dbus class playerThread(Thread): def __init__(self): Thread.__init__(self) self.shutdown = False self.playing = False self.end_current = False self.current = None self.blksize = 40960 self.dev = ao.AudioDevice("oss") self.stats = stats.statsengine(os.path.join(os.environ['HOME'], ".vixm/stats")) self.rb = rb_dbus.RhythmboxDbusThread(self) self.rb.start() def play_next(self, lists): try: # pop song off the PRIO queue s = lists[playlist.LIST_PRIO].pop() except IndexError: # no song to pop s = lists[playlist.LIST_DEFAULT].next() except ValueError: print "WTF is going on?!" raise ValueError self.play(s) def play(self, s): if self.playing: self.end_current = True self.playing = True self.current = s self.stats.playing(s) def run(self): while not self.shutdown: c = self.current if c and self.playing: # notify everyone self.rb.notify("file://" + c["file"], \ c["title"], c["artist"]) # play the file mf = mad.MadFile(c["file"]) while True: buf = mf.read(self.blksize) if buf is None or \ self.shutdown or \ self.end_current: break self.dev.play(buf, len(buf)) if self.end_current: self.end_current = False else: self.stats.played() self.playing = False else: # nothing to play, just sleep time.sleep(0.5) self.rb.notify_stop()