[gnome-music/wip/jfelder/async-duration] gstplayer: Improve query duration handling
- From: Jean Felder <jfelder src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-music/wip/jfelder/async-duration] gstplayer: Improve query duration handling
- Date: Sun, 21 Mar 2021 21:00:07 +0000 (UTC)
commit 3f408173c8561aaa6bece45c474025ac091fa3d1
Author: Jean Felder <jfelder src gnome org>
Date: Sun Mar 21 20:14:32 2021 +0100
gstplayer: Improve query duration handling
gnomemusic/gstplayer.py | 29 +++++++++++++++++++----------
gnomemusic/player.py | 4 ++--
2 files changed, 21 insertions(+), 12 deletions(-)
---
diff --git a/gnomemusic/gstplayer.py b/gnomemusic/gstplayer.py
index cb248fd88..55b602e02 100644
--- a/gnomemusic/gstplayer.py
+++ b/gnomemusic/gstplayer.py
@@ -64,6 +64,7 @@ class GstPlayer(GObject.GObject):
self._application = application
self._duration = -1.
+ self._known_duration = False
self._log = application.props.log
self._seek = False
self._tick = 0
@@ -82,6 +83,8 @@ class GstPlayer(GObject.GObject):
None, self._settings.get_value('replaygain'))
self._bus.connect('message::async-done', self._on_async_done)
+ self._bus.connect(
+ "message::duration-changed", self._on_duration_changed)
self._bus.connect('message::error', self._on_bus_error)
self._bus.connect('message::element', self._on_bus_element)
self._bus.connect('message::eos', self._on_bus_eos)
@@ -127,17 +130,27 @@ class GstPlayer(GObject.GObject):
self.emit("about-to-finish")
def _on_async_done(self, bus, message):
+ self._log.debug("async done")
if self._seek:
self._seek = False
self.emit("seek-finished")
+ if not self._known_duration:
+ self._query_duration()
+
+ def _on_duration_changed(self, bus, message):
+ self._log.debug("duration changed")
+ self._query_duration()
+
def _query_duration(self):
- success, duration = self._player.query_duration(
+ self._known_duration, duration = self._player.query_duration(
Gst.Format.TIME)
- if success:
+ if self._known_duration:
self.props.duration = duration / Gst.SECOND
+ self._log.debug("duration ok: {}".format(self.props.duration))
else:
+ self._log.debug("DURATION NOT OK")
self.props.duration = duration
def _on_new_clock(self, bus, message):
@@ -154,14 +167,10 @@ class GstPlayer(GObject.GObject):
self._missing_plugin_messages.append(message)
def _on_bus_stream_start(self, bus, message):
- def delayed_query():
- self._query_duration()
- self._tick = 0
- self.emit("stream-start")
-
- # Delay the signalling slightly or the new duration will not
- # have been set yet.
- GLib.timeout_add(1, delayed_query)
+ self._log.debug("stream start")
+ self._query_duration()
+ self._tick = 0
+ self.emit("stream-start")
def _on_state_changed(self, bus, message):
if message.src != self._player:
diff --git a/gnomemusic/player.py b/gnomemusic/player.py
index bdf85daf8..1d3692924 100644
--- a/gnomemusic/player.py
+++ b/gnomemusic/player.py
@@ -547,8 +547,8 @@ class Player(GObject.GObject):
self.play()
def _on_clock_tick(self, klass, tick):
- self._log.debug("Clock tick {}, player at {} seconds".format(
- tick, self._gst_player.props.position))
+ # self._log.debug("Clock tick {}, player at {} seconds".format(
+ # tick, self._gst_player.props.position))
current_song = self._playlist.props.current_song
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]