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)
41 self._stream = stream.GSTStream()
42 self._stream.connect("state-change", self._on_stream_state)
43 self._stream.connect("eof", self._on_stream_eof)
44 self._stream.connect("error", self._on_stream_error)
46 def set_piece_by_node(self, node):
47 assert node is None or node.is_leaf(), node
48 if self._node is node:
51 if self._node is not None:
52 self._stream.set_file(self._node.uri)
53 _moduleLogger.info("New node %r" % self._node)
54 self.emit("title_change", self._node)
62 if self._node is None:
64 return self._node.title
68 if self._node is None:
70 return self._node.subtitle
73 def can_navigate(self):
74 if self._node is None:
76 return self.node.can_navigate
80 return self._stream.state
83 _moduleLogger.info("play")
87 _moduleLogger.info("pause")
91 _moduleLogger.info("stop")
93 self.set_piece_by_node(None)
96 _moduleLogger.info("back")
99 _moduleLogger.info("next")
101 @misc_utils.log_exception(_moduleLogger)
102 def _on_stream_state(self, s, state):
103 _moduleLogger.info("State change %r" % state)
104 self.emit("state_change", state)
106 @misc_utils.log_exception(_moduleLogger)
107 def _on_stream_eof(self, s, uri):
108 _moduleLogger.info("EOF %s" % uri)
111 @misc_utils.log_exception(_moduleLogger)
112 def _on_stream_error(self, s, error, debug):
113 _moduleLogger.info("Error %s %s" % (error, debug))
114 self.emit("error", error, debug)
117 gobject.type_register(Player)