def __init__(self, mpg, timeToQuit): super(Server.ManageQueue, self).__init__() self._mpg = mpg self._scrobbler = Scrobbler() self.scrobbled = False self._timeToQuit = timeToQuit self._skippedTrack = False
def capture(args): """Read from stdin and pass mplayer output to ICY text analyzer.""" scrobbler = Scrobbler('/tmp/scrobbles.db', args.credentials) analyzer = ICYAnalyzer(trigger_callback=scrobbler.submit) buff = "" while True: try: char = sys.stdin.read(1) except UnicodeDecodeError: char = "" sys.stdout.write(char) if char == "\x1b": sys.stdout.flush() buff += char if buff.endswith("\n"): analyzer.process(buff) buff = "" if "(Quit)" in buff or "(End of file)" in buff: break if len(buff) > 1000: buff = ""
class ManageQueue(threading.Thread): """Handle playing a song after the current one has finished""" def __init__(self, mpg, timeToQuit): super(Server.ManageQueue, self).__init__() self._mpg = mpg self._scrobbler = Scrobbler() self.scrobbled = False self._timeToQuit = timeToQuit self._skippedTrack = False def skippedTrack(self): self._skippedTrack = True def markAsPlaying(self): metadata = Server.Metadata(self._mpg.filename) self._scrobbler.nowPlaying(metadata.artist, metadata.title, metadata.album) self._skippedTrack = False def run(self): while not self._timeToQuit.isTime: if self._mpg.timeToScrobble and not self.scrobbled: print "scrobbling this track!" metadata = Server.Metadata(self._mpg.filename) self._scrobbler.scrobble(metadata.artist, metadata.title, metadata.album) self.scrobbled = True if not self._mpg.playing: self._mpg.next() print "....next" self.markAsPlaying() self.scrobbled = False if self._skippedTrack: self.markAsPlaying() time.sleep(0.1)