5 import util.misc as misc_utils
10 _moduleLogger = logging.getLogger(__name__)
13 class Player(gobject.GObject):
17 gobject.SIGNAL_RUN_LAST,
19 (gobject.TYPE_PYOBJECT, ),
22 gobject.SIGNAL_RUN_LAST,
24 (gobject.TYPE_PYOBJECT, ),
27 gobject.SIGNAL_RUN_LAST,
29 (gobject.TYPE_PYOBJECT, gobject.TYPE_PYOBJECT),
33 STATE_PLAY = stream.GSTStream.STATE_PLAY
34 STATE_PAUSE = stream.GSTStream.STATE_PAUSE
35 STATE_STOP = stream.GSTStream.STATE_STOP
37 def __init__(self, index):
38 gobject.GObject.__init__(self)
42 self._calls = call_monitor.CallMonitor()
43 self._calls.connect("call_start", self._on_call_start)
45 self._stream = stream.GSTStream()
46 self._stream.connect("state-change", self._on_stream_state)
47 self._stream.connect("eof", self._on_stream_eof)
48 self._stream.connect("error", self._on_stream_error)
50 def set_piece_by_node(self, node):
51 assert node is None or node.is_leaf(), node
52 if self._node is node:
55 if self._node is not None:
56 self._stream.set_file(self._node.uri)
57 _moduleLogger.info("New node %r" % self._node)
58 self.emit("title_change", self._node)
66 if self._node is None:
68 return self._node.title
72 if self._node is None:
74 return self._node.subtitle
77 def can_navigate(self):
78 if self._node is None:
80 return self.node.can_navigate
84 return self._stream.state
87 _moduleLogger.info("play")
93 _moduleLogger.info("pause")
97 _moduleLogger.info("stop")
99 self.set_piece_by_node(None)
104 _moduleLogger.info("back")
107 _moduleLogger.info("next")
109 @misc_utils.log_exception(_moduleLogger)
110 def _on_stream_state(self, s, state):
111 _moduleLogger.info("State change %r" % state)
112 self.emit("state_change", state)
114 @misc_utils.log_exception(_moduleLogger)
115 def _on_stream_eof(self, s, uri):
116 _moduleLogger.info("EOF %s" % uri)
119 @misc_utils.log_exception(_moduleLogger)
120 def _on_stream_error(self, s, error, debug):
121 _moduleLogger.info("Error %s %s" % (error, debug))
122 self.emit("error", error, debug)
124 @misc_utils.log_exception(_moduleLogger)
125 def _on_call_start(self, monitor):
126 _moduleLogger.info("Call in progress, pausing")
130 gobject.type_register(Player)