Working to cleanup the player inteface including adding some helpers on
[watersofshiloah] / src / player.py
1 import logging
2
3 import gobject
4
5
6 _moduleLogger = logging.getLogger(__name__)
7
8
9 class Player(gobject.GObject):
10
11         __gsignals__ = {
12                 'state_change' : (
13                         gobject.SIGNAL_RUN_LAST,
14                         gobject.TYPE_NONE,
15                         (gobject.TYPE_PYOBJECT, ),
16                 ),
17                 'title_change' : (
18                         gobject.SIGNAL_RUN_LAST,
19                         gobject.TYPE_NONE,
20                         (gobject.TYPE_PYOBJECT, ),
21                 ),
22         }
23
24         def __init__(self, index):
25                 gobject.GObject.__init__(self)
26                 self._index = index
27                 self._node = None
28                 self._state = "play"
29
30         def set_piece_by_node(self, node):
31                 assert node.is_leaf() or node is None
32                 if self._node is node:
33                         return
34                 self._node = node
35                 self.emit("title_change", self._state)
36
37         @property
38         def title(self):
39                 if self._node is None:
40                         return ""
41                 return self._node.title
42
43         @property
44         def subtitle(self):
45                 if self._node is None:
46                         return ""
47                 return self._node.subtitle
48
49         @property
50         def can_navigate(self):
51                 if self._node is None:
52                         return False
53                 return self.node.can_navigate
54
55         @property
56         def state(self):
57                 return self._state
58
59         def play(self):
60                 if self._state == "play":
61                         return
62                 self._state = "play"
63                 self.emit("state_change", self._state)
64                 _moduleLogger.info("play")
65
66         def pause(self):
67                 if self._state == "pause":
68                         return
69                 self._state = "pause"
70                 self.emit("state_change", self._state)
71                 _moduleLogger.info("pause")
72
73         def stop(self):
74                 if self._state == "stop":
75                         return
76                 self._state = "stop"
77                 self.set_piece_by_node(None)
78                 self.emit("state_change", self._state)
79                 _moduleLogger.info("stop")
80
81         def back(self):
82                 _moduleLogger.info("back")
83
84         def next(self):
85                 _moduleLogger.info("next")
86
87
88 gobject.type_register(Player)