From a4376619a3582ecc5c92e8c6f1f53620ddbf6ed5 Mon Sep 17 00:00:00 2001 From: Ed Page Date: Mon, 10 May 2010 07:37:43 -0500 Subject: [PATCH] Working to cleanup the player inteface including adding some helpers on the nodes --- hand_tests/fake_player.py | 4 ---- src/index.py | 36 ++++++++++++++++++++++++++++++++++ src/mormonchannel_gtk.py | 2 +- src/playcontrol.py | 6 +++--- src/player.py | 48 ++++++++++++++++++++++++++++++++------------- src/windows.py | 4 ++-- 6 files changed, 76 insertions(+), 24 deletions(-) diff --git a/hand_tests/fake_player.py b/hand_tests/fake_player.py index be955d2..78e6840 100644 --- a/hand_tests/fake_player.py +++ b/hand_tests/fake_player.py @@ -68,10 +68,6 @@ class FakePlayer(gobject.GObject): 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 diff --git a/src/index.py b/src/index.py index 7e9341c..e8deff6 100644 --- a/src/index.py +++ b/src/index.py @@ -188,6 +188,18 @@ class LeafNode(Node): 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") @@ -211,6 +223,18 @@ class RadioChannelNode(LeafNode): 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: @@ -298,3 +322,15 @@ class TalkNode(LeafNode): 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"] diff --git a/src/mormonchannel_gtk.py b/src/mormonchannel_gtk.py index 68da221..6484fff 100755 --- a/src/mormonchannel_gtk.py +++ b/src/mormonchannel_gtk.py @@ -40,7 +40,7 @@ class MormonChannelProgram(hildonize.get_app_class()): 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: diff --git a/src/playcontrol.py b/src/playcontrol.py index 16e801a..adcf27e 100644 --- a/src/playcontrol.py +++ b/src/playcontrol.py @@ -19,7 +19,7 @@ class PlayControl(object): 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() @@ -132,8 +132,8 @@ class PlayControl(object): 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): diff --git a/src/player.py b/src/player.py index a800a3d..6197138 100644 --- a/src/player.py +++ b/src/player.py @@ -14,11 +14,6 @@ class Player(gobject.GObject): 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, @@ -26,36 +21,61 @@ class Player(gobject.GObject): ), } - def __init__(self): + def __init__(self, index): 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): - return "" + if self._node is None: + return "" + return self._node.title @property def subtitle(self): - return "" + if self._node is None: + return "" + return self._node.subtitle @property def can_navigate(self): - return True + if self._node is None: + return False + return self.node.can_navigate @property def state(self): - return "play" - - @property - def background(self): - return "conference_background" + return self._state def play(self): + if self._state == "play": + return + self._state = "play" + self.emit("state_change", self._state) _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): + 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): diff --git a/src/windows.py b/src/windows.py index 8015b87..c52ee3f 100644 --- a/src/windows.py +++ b/src/windows.py @@ -765,7 +765,7 @@ class ConferenceTalkWindow(BasicWindow): 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, ) @@ -798,7 +798,7 @@ class ConferenceTalkWindow(BasicWindow): @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, ) -- 1.7.9.5