From 38a0379289645cae29c5522ffdca16fd557369dd Mon Sep 17 00:00:00 2001 From: Ed Page Date: Wed, 19 May 2010 22:35:23 -0500 Subject: [PATCH] Continually update the selected row in the radio program, switching to a new day if needed (fixed a tz bug also) --- src/mormonchannel_gtk.py | 2 +- src/windows/radio.py | 37 ++++++++++++++++++++++++++++++------- 2 files changed, 31 insertions(+), 8 deletions(-) diff --git a/src/mormonchannel_gtk.py b/src/mormonchannel_gtk.py index a237289..fb7749d 100755 --- a/src/mormonchannel_gtk.py +++ b/src/mormonchannel_gtk.py @@ -5,9 +5,9 @@ @bug For some reason, the back/close button doesn't work when I nest multiple levels @bug When switching from conference to magazines, it randomly jumps around and duplicates windows @bug fullscreen does not propgate -@todo Update the program time shown @todo Re-use windows for better performance +@todo Make radio program updates only happen when the app has focus to reduce CPU wakes @todo Need to confirm id's are persistent (not just for todos but broken behavior on transition) @todo Track recent @todo Persisted Pause diff --git a/src/windows/radio.py b/src/windows/radio.py index faa3789..c3a5d3f 100644 --- a/src/windows/radio.py +++ b/src/windows/radio.py @@ -86,8 +86,12 @@ class RadioWindow(windows._base.BasicWindow): self._layout.pack_start(self._radioLayout, True, True) self._dateShown = datetime.datetime.now(tz=time_utils.Mountain) + self._currentTime = self._dateShown self._update_title() + self._continualUpdate = go_utils.Timeout(self._on_continual_update, once = False) + self._continualUpdate.start(seconds=60) + def show(self): windows._base.BasicWindow.show(self) @@ -99,6 +103,15 @@ class RadioWindow(windows._base.BasicWindow): def jump_to(self, node): _moduleLogger.info("Only 1 channel, nothing to jump to") + def _update_time(self, newTime): + oldTime = self._dateShown + self._dateShown = newTime + if newTime.date() == oldTime.date(): + self._select_row() + else: + self._update_title() + self._refresh() + def _update_title(self): self._window.set_title("%s - %s" % (self._node.title, self._dateShown.strftime("%m/%d"))) @@ -150,6 +163,20 @@ class RadioWindow(windows._base.BasicWindow): return i @misc_utils.log_exception(_moduleLogger) + def _on_continual_update(self, *args): + if self._isDestroyed: + return False + newTime = datetime.datetime.now(tz=time_utils.Mountain) + oldTime = self._currentTime + shownTime = self._dateShown + + self._currentTime = newTime + if shownTime.date() == oldTime.date(): + _moduleLogger.info("Today selected, updating selection") + self._update_time(newTime) + return True + + @misc_utils.log_exception(_moduleLogger) def _on_player_state_change(self, player, newState): if self._headerNavigation.is_active() or self._presenterNavigation.is_active(): return @@ -210,13 +237,9 @@ class RadioWindow(windows._base.BasicWindow): elif navState == "up": pass elif navState == "left": - self._dateShown += datetime.timedelta(days=1) - self._update_title() - self._refresh() + self._update_time(self._dateShown + datetime.timedelta(days=1)) elif navState == "right": - self._dateShown -= datetime.timedelta(days=1) - self._update_title() - self._refresh() + self._update_time(self._dateShown - datetime.timedelta(days=1)) @misc_utils.log_exception(_moduleLogger) def _on_channels(self, channels): @@ -245,7 +268,7 @@ class RadioWindow(windows._base.BasicWindow): row = program["time"], program["title"] self._programmingModel.append(row) - currentDate = datetime.datetime.now() + currentDate = self._currentTime if currentDate.date() != self._dateShown.date(): self._treeView.get_selection().set_mode(gtk.SELECTION_NONE) else: -- 1.7.9.5