X-Git-Url: http://git.maemo.org/git/?p=watersofshiloah;a=blobdiff_plain;f=src%2Fwindows%2Fmagazines.py;h=fa089d67f6267b192376f21938e58ebc8adbd139;hp=83749233515a2a215c8de9645b6b0d658b3deb8f;hb=b5c8d3f03f31351ff11bf8a60c90735070def2a2;hpb=22bcf3aa801abce9855738cd1f007be84f4836be diff --git a/src/windows/magazines.py b/src/windows/magazines.py index 8374923..fa089d6 100644 --- a/src/windows/magazines.py +++ b/src/windows/magazines.py @@ -26,10 +26,16 @@ class MagazinesWindow(windows._base.ListWindow): def _get_columns(cls): yield gobject.TYPE_PYOBJECT, None + pixrenderer = gtk.CellRendererPixbuf() + column = gtk.TreeViewColumn("Covers") + column.pack_start(pixrenderer, expand=True) + column.add_attribute(pixrenderer, "pixbuf", 1) + yield gobject.TYPE_OBJECT, column + textrenderer = gtk.CellRendererText() column = gtk.TreeViewColumn("Magazine") column.pack_start(textrenderer, expand=True) - column.add_attribute(textrenderer, "text", 1) + column.add_attribute(textrenderer, "text", 2) yield gobject.TYPE_STRING, column def _refresh(self): @@ -46,13 +52,38 @@ class MagazinesWindow(windows._base.ListWindow): return self._hide_loading() - for programNode in programs: + for i, programNode in enumerate(programs): program = programNode.get_properties() - row = programNode, program["title"] + img = self._store.get_pixbuf_from_store(self._store.STORE_LOOKUP["nomagazineimage"]) + row = programNode, img, program["title"] self._model.append(row) + programNode.get_children(self._create_on_issues(i), self._on_error) + self._select_row() + def _create_on_issues(self, row): + return lambda issues: self._on_issues(row, issues) + + @misc_utils.log_exception(_moduleLogger) + def _on_issues(self, row, issues): + for issue in issues: + self._store.get_pixbuf_from_url( + issue.get_properties()["pictureURL"], + lambda pix: self._on_image(row, pix), + self._on_error, + ) + break + else: + _moduleLogger.info("No issues for magazine %s" % row) + + @misc_utils.log_exception(_moduleLogger) + def _on_image(self, row, pix): + treeiter = self._model.iter_nth_child(None, row) + self._model.set_value(treeiter, 1, pix) + treeiter = self._model.iter_nth_child(None, row) + self._model.row_changed((row, ), treeiter) + @misc_utils.log_exception(_moduleLogger) def _on_error(self, exception): self._hide_loading() @@ -89,10 +120,16 @@ class MagazineIssuesWindow(windows._base.ListWindow): def _get_columns(cls): yield gobject.TYPE_PYOBJECT, None + pixrenderer = gtk.CellRendererPixbuf() + column = gtk.TreeViewColumn("Covers") + column.pack_start(pixrenderer, expand=True) + column.add_attribute(pixrenderer, "pixbuf", 1) + yield gobject.TYPE_OBJECT, column + textrenderer = gtk.CellRendererText() column = gtk.TreeViewColumn("Issue") column.pack_start(textrenderer, expand=True) - column.add_attribute(textrenderer, "text", 1) + column.add_attribute(textrenderer, "text", 2) yield gobject.TYPE_STRING, column def _refresh(self): @@ -111,9 +148,16 @@ class MagazineIssuesWindow(windows._base.ListWindow): self._hide_loading() for programNode in programs: program = programNode.get_properties() - row = programNode, program["title"] + img = self._store.get_pixbuf_from_store(self._store.STORE_LOOKUP["nomagazineimage"]) + row = programNode, img, program["title"] self._model.append(row) + self._store.get_pixbuf_from_url( + program["pictureURL"], + self._create_on_image(programNode), + self._on_error, + ) + self._select_row() @misc_utils.log_exception(_moduleLogger) @@ -121,6 +165,21 @@ class MagazineIssuesWindow(windows._base.ListWindow): self._hide_loading() self._errorBanner.push_message(str(exception)) + def _create_on_image(self, programNode): + return lambda pix: self._on_image(programNode, pix) + + @misc_utils.log_exception(_moduleLogger) + def _on_image(self, childNode, pix): + for i, row in enumerate(self._model): + if row[0] is childNode: + break + else: + raise RuntimeError("Could not find %r" % childNode) + treeiter = self._model.iter_nth_child(None, i) + self._model.set_value(treeiter, 1, pix) + treeiter = self._model.iter_nth_child(None, i) + self._model.row_changed((i, ), treeiter) + def _window_from_node(self, node): issuesWindow = MagazineArticlesWindow(self._player, self._store, node) issuesWindow.window.set_modal(True) @@ -282,8 +341,10 @@ class MagazineArticleWindow(windows._base.BasicWindow): @misc_utils.log_exception(_moduleLogger) def _on_player_update_seek(self): + if self._isDestroyed: + return False self._seekbar.set_value(self._player.percent_elapsed * 100) - return True if not self._isDestroyed else False + return True @misc_utils.log_exception(_moduleLogger) def _on_player_state_change(self, player, newState): @@ -294,8 +355,9 @@ class MagazineArticleWindow(windows._base.BasicWindow): self._updateSeek.start(seconds=1) else: self._seekbar.hide() - self._updateSeek.cancel() - self._updateSeek = None + if self._updateSeek is not None: + self._updateSeek.cancel() + self._updateSeek = None if not self._presenterNavigation.is_active(): self._set_context(newState)