5 import util.misc as misc_utils
9 _moduleLogger = logging.getLogger(__name__)
12 class Player(gobject.GObject):
16 gobject.SIGNAL_RUN_LAST,
18 (gobject.TYPE_PYOBJECT, ),
21 gobject.SIGNAL_RUN_LAST,
23 (gobject.TYPE_PYOBJECT, ),
26 gobject.SIGNAL_RUN_LAST,
28 (gobject.TYPE_PYOBJECT, gobject.TYPE_PYOBJECT),
32 STATE_PLAY = stream.GSTStream.STATE_PLAY
33 STATE_PAUSE = stream.GSTStream.STATE_PAUSE
34 STATE_STOP = stream.GSTStream.STATE_STOP
36 def __init__(self, index):
37 gobject.GObject.__init__(self)
40 self._stream = stream.GSTStream()
41 self._stream.connect("state-change", self._on_stream_state)
42 self._stream.connect("eof", self._on_stream_eof)
43 self._stream.connect("error", self._on_stream_error)
45 def set_piece_by_node(self, node):
46 assert node is None or node.is_leaf(), node
47 if self._node is node:
50 if self._node is not None:
51 self._stream.set_file(self._node.uri)
52 _moduleLogger.info("New node %r" % self._node)
53 self.emit("title_change", self._node)
61 if self._node is None:
63 return self._node.title
67 if self._node is None:
69 return self._node.subtitle
72 def can_navigate(self):
73 if self._node is None:
75 return self.node.can_navigate
79 return self._stream.state
82 _moduleLogger.info("play")
86 _moduleLogger.info("pause")
90 _moduleLogger.info("stop")
92 self.set_piece_by_node(None)
95 _moduleLogger.info("back")
98 _moduleLogger.info("next")
100 @misc_utils.log_exception(_moduleLogger)
101 def _on_stream_state(self, s, state):
102 _moduleLogger.info("State change %r" % state)
103 self.emit("state_change", state)
105 @misc_utils.log_exception(_moduleLogger)
106 def _on_stream_eof(self, s, uri):
107 _moduleLogger.info("EOF %s" % uri)
110 @misc_utils.log_exception(_moduleLogger)
111 def _on_stream_error(self, s, error, debug):
112 _moduleLogger.info("Error %s %s" % (error, debug))
113 self.emit("error", error, debug)
116 gobject.type_register(Player)