3 from __future__ import with_statement
4 from __future__ import division
8 from PyQt4 import QtCore
10 import util.misc as misc_utils
23 _moduleLogger = logging.getLogger(__name__)
26 class StreamToken(QtCore.QObject):
28 stateChange = QtCore.pyqtSignal(str)
29 invalidated = QtCore.pyqtSignal()
30 error = QtCore.pyqtSignal(str)
32 STATE_PLAY = stream.Stream.STATE_PLAY
33 STATE_PAUSE = stream.Stream.STATE_PAUSE
34 STATE_STOP = stream.Stream.STATE_STOP
36 def __init__(self, stream):
37 QtCore.QObject.__init__(self)
39 self._stream.connect("state-change", self._on_stream_state)
40 self._stream.connect("eof", self._on_stream_eof)
41 self._stream.connect("error", self._on_stream_error)
46 return self._stream.state
48 return self.STATE_STOP
52 return self._stream is not None
64 if self._stream is None:
66 _moduleLogger.info("Playback token invalidated")
69 @misc_utils.log_exception(_moduleLogger)
70 def _on_stream_state(self, s, state):
73 if state == self.STATE_STOP:
75 self.stateChange.emit(state)
77 @misc_utils.log_exception(_moduleLogger)
78 def _on_stream_eof(self, s, uri):
82 self.stateChange.emit(self.STATE_STOP)
84 @misc_utils.log_exception(_moduleLogger)
85 def _on_stream_error(self, s, error, debug):
88 _moduleLogger.info("Error %s %s" % (error, debug))
89 self.error.emit(str(error))
92 class StreamHandler(QtCore.QObject):
95 QtCore.QObject.__init__(self)
96 self._stream = stream.Stream()
97 self._token = StreamToken(self._stream)
99 def set_file(self, path):
100 self._token.invalidate()
101 self._token = StreamToken(self._stream)
102 self._stream.set_file(path)
105 @misc_utils.log_exception(_moduleLogger)
106 def _on_stream_state(self, s, state):
107 _moduleLogger.info("State change %r" % state)
110 if __name__ == "__main__":