change window title to current playing video

This commit is contained in:
Jonas Weinz 2021-02-07 16:41:33 +01:00
parent 638985c822
commit 85176956ab
2 changed files with 35 additions and 11 deletions

View File

@ -7,10 +7,13 @@ import gi
gi.require_version("Gtk", "3.0") gi.require_version("Gtk", "3.0")
WINDOW_TITLE = "Gtk Mediathek Player"
class MainApp(Gtk.Window): class MainApp(Gtk.Window):
def __init__(self): def __init__(self):
Gtk.Window.__init__(self, title="Gtk Mediathek Player") Gtk.Window.__init__(self, title=WINDOW_TITLE)
self._current_mediathek_item = None
self.set_default_icon_name("gtkmediathekplayer") self.set_default_icon_name("gtkmediathekplayer")
@ -36,9 +39,12 @@ class MainApp(Gtk.Window):
self._main_container.add(self._main_stack) self._main_container.add(self._main_stack)
self._headerbar = self._create_headerbar(True) self._headerbar = self._create_headerbar(True)
# TODO: standardize widget creation methods
self._fullscreen_bar = self._create_headerbar(False)
self._fullscreen_bar.set_title(WINDOW_TITLE)
self._create_fullscreen_bar() self._create_fullscreen_bar()
# self._main_container.add_overlay(self._create_fullscreen_bar())
self._main_container.add_overlay(self._revealer) self._main_container.add_overlay(self._revealer)
self.add(self._main_container) self.add(self._main_container)
@ -126,7 +132,7 @@ class MainApp(Gtk.Window):
def _create_fullscreen_bar(self): def _create_fullscreen_bar(self):
self._revealer = Gtk.Revealer() self._revealer = Gtk.Revealer()
self._revealer.add(self._create_headerbar(False)) self._revealer.add(self._fullscreen_bar)
self._revealer.set_valign(Gtk.Align.START) self._revealer.set_valign(Gtk.Align.START)
self._revealer.set_vexpand(False) self._revealer.set_vexpand(False)
self._revealer.set_transition_type( self._revealer.set_transition_type(
@ -150,17 +156,35 @@ class MainApp(Gtk.Window):
self._main_stack.set_visible_child_name(name) self._main_stack.set_visible_child_name(name)
if name != "player": if name != "player":
self._player_widget.pause() self._player_widget.pause()
self.set_title(WINDOW_TITLE)
self._fullscreen_bar.set_title(WINDOW_TITLE)
else: else:
if active_pane != "player": if active_pane != "player":
if self._player_widget.is_paused(): if self._player_widget.is_paused():
self._player_widget.play() self._player_widget.play()
if self._current_mediathek_item is not None:
title = self._current_mediathek_item.get_title()
if title is not None:
self.set_title(title)
def get_active_pane(self): def get_active_pane(self):
return self._main_stack.get_visible_child_name() return self._main_stack.get_visible_child_name()
def start_player(self, uri: str): def start_player(self,
uri: str,
mediathek_item:mr.MediathekViewWebAnswer = None):
if self.get_active_pane() != "player": if self.get_active_pane() != "player":
self.set_active_pane("player") self.set_active_pane("player")
self._current_mediathek_item = mediathek_item
if mediathek_item is not None:
title = mediathek_item.get_title()
if title is not None:
self.set_title(title)
self._fullscreen_bar.set_title(title)
#self._headerbar.set_title(title)
self._player_widget.stop() self._player_widget.stop()
self._player_widget.play_from_uri(uri) self._player_widget.play_from_uri(uri)

View File

@ -52,7 +52,8 @@ class PlayerWidget(Gtk.Overlay):
position_string = tools.seconds_to_timestring(int(position)) position_string = tools.seconds_to_timestring(int(position))
duration_string = tools.seconds_to_timestring(int(self._duration)) duration_string = tools.seconds_to_timestring(int(self._duration))
self._duration_text.set_markup(f"{position_string}/{duration_string}") self._duration_text.set_markup(
f"{position_string}/{duration_string}")
self._is_update = False self._is_update = False
@ -115,7 +116,8 @@ class PlayerWidget(Gtk.Overlay):
# TODO: replace this deprecated (honestly, i find it disturbing that there is no container or css template) # TODO: replace this deprecated (honestly, i find it disturbing that there is no container or css template)
# already there to do this, such that you are forced to create a custom css # already there to do this, such that you are forced to create a custom css
# snippet and override the default gtk scheme) # snippet and override the default gtk scheme)
box.override_background_color(Gtk.StateType.NORMAL, Gdk.RGBA(.0,.0,.0,.8)) box.override_background_color(
Gtk.StateType.NORMAL, Gdk.RGBA(.0, .0, .0, .8))
self._controls.add(box) self._controls.add(box)
@ -126,8 +128,6 @@ class PlayerWidget(Gtk.Overlay):
style_context = self._controls.get_style_context() style_context = self._controls.get_style_context()
style_context.add_class(Gtk.STYLE_CLASS_OSD) style_context.add_class(Gtk.STYLE_CLASS_OSD)
self._play_pause_button.connect("clicked", self.toogle_play) self._play_pause_button.connect("clicked", self.toogle_play)
def play_from_uri(self, uri: str): def play_from_uri(self, uri: str):
@ -168,13 +168,13 @@ class PlayerWidget(Gtk.Overlay):
def get_state(self): def get_state(self):
return self._videoarea.get_state() return self._videoarea.get_state()
def is_playing(self) -> bool: def is_playing(self) -> bool:
return self.get_state() == Gst.State.PLAYING return self.get_state() == Gst.State.PLAYING
def is_stopped(self) -> bool: def is_stopped(self) -> bool:
return self.get_state() == Gst.State.NULL return self.get_state() == Gst.State.NULL
def is_paused(self) -> bool: def is_paused(self) -> bool:
return self.get_state() == Gst.State.PAUSED return self.get_state() == Gst.State.PAUSED