- windows._base.BasicWindow.__init__(self, app, player, store)
- self._node = node
- self._playerNode = self._player.node
- self._nextSearch = None
- self._updateSeek = None
-
- self.connect_auto(self._player, "state-change", self._on_player_state_change)
- self.connect_auto(self._player, "title-change", self._on_player_title_change)
- self.connect_auto(self._player, "error", self._on_player_error)
-
- self._loadingBanner = banners.GenericBanner()
-
- self._presenter = presenter.StreamPresenter(self._store)
- self._presenter.set_context(
- self._store.STORE_LOOKUP["conference_background"],
- self._node.title,
- self._node.subtitle,
- )
- self._presenterNavigation = presenter.NavigationBox()
- self._presenterNavigation.toplevel.add(self._presenter.toplevel)
- self._presenterNavigation.connect("action", self._on_nav_action)
- self._presenterNavigation.connect("navigating", self._on_navigating)
-
- self._seekbar = hildonize.create_seekbar()
- self._seekbar.connect("change-value", self._on_user_seek)
-
- self._layout.pack_start(self._loadingBanner.toplevel, False, False)
- self._layout.pack_start(self._presenterNavigation.toplevel, True, True)
- self._layout.pack_start(self._seekbar, False, False)
-
- self._window.set_title(self._node.title)
-
- def show(self):
- windows._base.BasicWindow.show(self)
- self._window.show_all()
- self._errorBanner.toplevel.hide()
- self._loadingBanner.toplevel.hide()
- self._set_context(self._player.state)
- self._seekbar.hide()
-
- def jump_to(self, node):
- assert self._node is node
-
- @property
- def _active(self):
- return self._playerNode is self._node
-
- def _show_loading(self):
- animationPath = self._store.STORE_LOOKUP["loading"]
- animation = self._store.get_pixbuf_animation_from_store(animationPath)
- self._loadingBanner.show(animation, "Loading...")
-
- def _hide_loading(self):
- self._loadingBanner.hide()
-
- def _set_context(self, state):
- if state == self._player.STATE_PLAY:
- if self._active:
- self._presenter.set_state(self._store.STORE_LOOKUP["pause"])
- else:
- self._presenter.set_state(self._store.STORE_LOOKUP["play"])
- elif state == self._player.STATE_PAUSE:
- self._presenter.set_state(self._store.STORE_LOOKUP["play"])
- elif state == self._player.STATE_STOP:
- self._presenter.set_state(self._store.STORE_LOOKUP["play"])
- else:
- _moduleLogger.info("Unhandled player state %s" % state)
-
- @misc_utils.log_exception(_moduleLogger)
- def _on_user_seek(self, widget, scroll, value):
- self._player.seek(value / 100.0)
-
- @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
-
- @misc_utils.log_exception(_moduleLogger)
- def _on_player_state_change(self, player, newState):
- if self._active and self._player.state == self._player.STATE_PLAY:
- self._seekbar.show()
- assert self._updateSeek is None
- self._updateSeek = go_utils.Timeout(self._on_player_update_seek, once=False)
- self._updateSeek.start(seconds=1)
- else:
- self._seekbar.hide()
- if self._updateSeek is not None:
- self._updateSeek.cancel()
- self._updateSeek = None
-
- if not self._presenterNavigation.is_active():
- self._set_context(newState)