3 from __future__ import with_statement
4 from __future__ import division
8 import util.qt_compat as qt_compat
9 QtCore = qt_compat.QtCore
11 import util.misc as misc_utils
24 _moduleLogger = logging.getLogger(__name__)
27 class StreamToken(QtCore.QObject):
29 stateChange = qt_compat.Signal(str)
30 invalidated = qt_compat.Signal()
31 error = qt_compat.Signal(str)
33 STATE_PLAY = stream.Stream.STATE_PLAY
34 STATE_PAUSE = stream.Stream.STATE_PAUSE
35 STATE_STOP = stream.Stream.STATE_STOP
37 def __init__(self, stream):
38 QtCore.QObject.__init__(self)
40 self._stream.connect("state-change", self._on_stream_state)
41 self._stream.connect("eof", self._on_stream_eof)
42 self._stream.connect("error", self._on_stream_error)
47 return self._stream.state
49 return self.STATE_STOP
53 return self._stream is not None
65 if self._stream is None:
67 _moduleLogger.info("Playback token invalidated")
70 @misc_utils.log_exception(_moduleLogger)
71 def _on_stream_state(self, s, state):
74 if state == self.STATE_STOP:
76 self.stateChange.emit(state)
78 @misc_utils.log_exception(_moduleLogger)
79 def _on_stream_eof(self, s, uri):
83 self.stateChange.emit(self.STATE_STOP)
85 @misc_utils.log_exception(_moduleLogger)
86 def _on_stream_error(self, s, error, debug):
89 _moduleLogger.info("Error %s %s" % (error, debug))
90 self.error.emit(str(error))
93 class StreamHandler(QtCore.QObject):
96 QtCore.QObject.__init__(self)
97 self._stream = stream.Stream()
98 self._token = StreamToken(self._stream)
100 def set_file(self, path):
101 self._token.invalidate()
102 self._token = StreamToken(self._stream)
103 self._stream.set_file(path)
106 @misc_utils.log_exception(_moduleLogger)
107 def _on_stream_state(self, s, state):
108 _moduleLogger.info("State change %r" % state)
111 if __name__ == "__main__":