Working to cleanup the player inteface including adding some helpers on
authorEd Page <eopage@byu.net>
Mon, 10 May 2010 12:37:43 +0000 (07:37 -0500)
committerEd Page <eopage@byu.net>
Tue, 11 May 2010 02:21:38 +0000 (21:21 -0500)
the nodes

hand_tests/fake_player.py
src/index.py
src/mormonchannel_gtk.py
src/playcontrol.py
src/player.py
src/windows.py

index be955d2..78e6840 100644 (file)
@@ -68,10 +68,6 @@ class FakePlayer(gobject.GObject):
        def state(self):
                return self._state
 
        def state(self):
                return self._state
 
-       @property
-       def background(self):
-               return "conference_background"
-
        def _state_change(self, widget, state):
                self.emit("state_change", state)
                self._state = state
        def _state_change(self, widget, state):
                self.emit("state_change", state)
                self._state = state
index 7e9341c..e8deff6 100644 (file)
@@ -188,6 +188,18 @@ class LeafNode(Node):
        def is_leaf(self):
                return True
 
        def is_leaf(self):
                return True
 
+       @property
+       def can_navigate(self):
+               raise NotImplementedError("On %s" % type(self))
+
+       @property
+       def title(self):
+               raise NotImplementedError("On %s" % type(self))
+
+       @property
+       def subtitle(self):
+               raise NotImplementedError("On %s" % type(self))
+
        def _get_children(self, on_success, on_error):
                raise RuntimeError("Not is a leaf")
 
        def _get_children(self, on_success, on_error):
                raise RuntimeError("Not is a leaf")
 
@@ -211,6 +223,18 @@ class RadioChannelNode(LeafNode):
                self._extendedData = {}
                self._request = None
 
                self._extendedData = {}
                self._request = None
 
+       @property
+       def can_navigate(self):
+               return False
+
+       @property
+       def title(self):
+               return "Radio"
+
+       @property
+       def subtitle(self):
+               return ""
+
        def get_programming(self, date, on_success, on_error):
                date = date.strftime("%Y-%m-%d")
                try:
        def get_programming(self, date, on_success, on_error):
                date = date.strftime("%Y-%m-%d")
                try:
@@ -298,3 +322,15 @@ class TalkNode(LeafNode):
 
        def __init__(self, connection, parent, data):
                LeafNode.__init__(self, connection, parent, data)
 
        def __init__(self, connection, parent, data):
                LeafNode.__init__(self, connection, parent, data)
+
+       @property
+       def can_navigate(self):
+               return True
+
+       @property
+       def title(self):
+               return self._date["title"]
+
+       @property
+       def subtitle(self):
+               return self._date["speaker"]
index 68da221..6484fff 100755 (executable)
@@ -40,7 +40,7 @@ class MormonChannelProgram(hildonize.get_app_class()):
                super(MormonChannelProgram, self).__init__()
                self._store = imagestore.ImageStore("../data", "../data")
                self._index = index.AudioIndex()
                super(MormonChannelProgram, self).__init__()
                self._store = imagestore.ImageStore("../data", "../data")
                self._index = index.AudioIndex()
-               self._player = player.Player()
+               self._player = player.Player(self._index)
 
                self._index.start()
                try:
 
                self._index.start()
                try:
index 16e801a..adcf27e 100644 (file)
@@ -19,7 +19,7 @@ class PlayControl(object):
 
                self._player = player
                self._player.connect("state-change", self._on_player_state_change)
 
                self._player = player
                self._player.connect("state-change", self._on_player_state_change)
-               self._player.connect("navigate-change", self._on_player_nav_change)
+               self._player.connect("title-change", self._on_player_nav_change)
 
                img = store.get_image_from_store(store.STORE_LOOKUP["prev"])
                self._back = gtk.Button()
 
                img = store.get_image_from_store(store.STORE_LOOKUP["prev"])
                self._back = gtk.Button()
@@ -132,8 +132,8 @@ class PlayControl(object):
                self._set_state(newState)
 
        @misc_utils.log_exception(_moduleLogger)
                self._set_state(newState)
 
        @misc_utils.log_exception(_moduleLogger)
-       def _on_player_nav_change(self, player, canNavigate):
-               self._set_navigate(canNavigate)
+       def _on_player_nav_change(self, player, newState):
+               self._set_navigate(player.can_navigate)
 
        @misc_utils.log_exception(_moduleLogger)
        def _on_back_clicked(self, *args):
 
        @misc_utils.log_exception(_moduleLogger)
        def _on_back_clicked(self, *args):
index a800a3d..6197138 100644 (file)
@@ -14,11 +14,6 @@ class Player(gobject.GObject):
                        gobject.TYPE_NONE,
                        (gobject.TYPE_PYOBJECT, ),
                ),
                        gobject.TYPE_NONE,
                        (gobject.TYPE_PYOBJECT, ),
                ),
-               'navigate_change' : (
-                       gobject.SIGNAL_RUN_LAST,
-                       gobject.TYPE_NONE,
-                       (gobject.TYPE_PYOBJECT, ),
-               ),
                'title_change' : (
                        gobject.SIGNAL_RUN_LAST,
                        gobject.TYPE_NONE,
                'title_change' : (
                        gobject.SIGNAL_RUN_LAST,
                        gobject.TYPE_NONE,
@@ -26,36 +21,61 @@ class Player(gobject.GObject):
                ),
        }
 
                ),
        }
 
-       def __init__(self):
+       def __init__(self, index):
                gobject.GObject.__init__(self)
                gobject.GObject.__init__(self)
+               self._index = index
+               self._node = None
+               self._state = "play"
+
+       def set_piece_by_node(self, node):
+               assert node.is_leaf() or node is None
+               if self._node is node:
+                       return
+               self._node = node
+               self.emit("title_change", self._state)
 
        @property
        def title(self):
 
        @property
        def title(self):
-               return ""
+               if self._node is None:
+                       return ""
+               return self._node.title
 
        @property
        def subtitle(self):
 
        @property
        def subtitle(self):
-               return ""
+               if self._node is None:
+                       return ""
+               return self._node.subtitle
 
        @property
        def can_navigate(self):
 
        @property
        def can_navigate(self):
-               return True
+               if self._node is None:
+                       return False
+               return self.node.can_navigate
 
        @property
        def state(self):
 
        @property
        def state(self):
-               return "play"
-
-       @property
-       def background(self):
-               return "conference_background"
+               return self._state
 
        def play(self):
 
        def play(self):
+               if self._state == "play":
+                       return
+               self._state = "play"
+               self.emit("state_change", self._state)
                _moduleLogger.info("play")
 
        def pause(self):
                _moduleLogger.info("play")
 
        def pause(self):
+               if self._state == "pause":
+                       return
+               self._state = "pause"
+               self.emit("state_change", self._state)
                _moduleLogger.info("pause")
 
        def stop(self):
                _moduleLogger.info("pause")
 
        def stop(self):
+               if self._state == "stop":
+                       return
+               self._state = "stop"
+               self.set_piece_by_node(None)
+               self.emit("state_change", self._state)
                _moduleLogger.info("stop")
 
        def back(self):
                _moduleLogger.info("stop")
 
        def back(self):
index 8015b87..c52ee3f 100644 (file)
@@ -765,7 +765,7 @@ class ConferenceTalkWindow(BasicWindow):
                self._loadingBanner.toplevel.hide()
 
                self._presenter.set_context(
                self._loadingBanner.toplevel.hide()
 
                self._presenter.set_context(
-                       self._store.STORE_LOOKUP[self._player.background],
+                       self._store.STORE_LOOKUP["conference_background"],
                        self._player.title,
                        self._player.subtitle,
                )
                        self._player.title,
                        self._player.subtitle,
                )
@@ -798,7 +798,7 @@ class ConferenceTalkWindow(BasicWindow):
        @misc_utils.log_exception(_moduleLogger)
        def _on_player_title_change(self, player, newState):
                self._presenter.set_context(
        @misc_utils.log_exception(_moduleLogger)
        def _on_player_title_change(self, player, newState):
                self._presenter.set_context(
-                       self._store.STORE_LOOKUP[self._player.background],
+                       self._store.STORE_LOOKUP["conference_background"],
                        self._player.title,
                        self._player.subtitle,
                )
                        self._player.title,
                        self._player.subtitle,
                )