diff --git a/beetsplug/bpd/__init__.py b/beetsplug/bpd/__init__.py index 33deda02c..5ec88c745 100644 --- a/beetsplug/bpd/__init__.py +++ b/beetsplug/bpd/__init__.py @@ -1167,7 +1167,7 @@ class BPDPlugin(BeetsPlugin): server.run() except NoGstreamerError: global_log.error(u'Gstreamer Python bindings not found.') - global_log.error(u'Install "python-gst0.10", "py27-gst-python", ' + global_log.error(u'Install "python-gst-1.0" ' u'or similar package to use BPD.') def commands(self): diff --git a/beetsplug/bpd/gstplayer.py b/beetsplug/bpd/gstplayer.py index 652079df8..feb909ea0 100644 --- a/beetsplug/bpd/gstplayer.py +++ b/beetsplug/bpd/gstplayer.py @@ -33,6 +33,9 @@ from gi.repository import GObject, Gst GObject.threads_init() Gst.init(None) +class QueryError(Exception): + pass + class GstPlayer(object): """A music player abstracting GStreamer's Playbin element. @@ -165,12 +168,20 @@ class GstPlayer(object): """ fmt = Gst.Format(Gst.Format.TIME) try: - pos = self.player.query_position(fmt)[1] / (10 ** 9) - length = self.player.query_duration(fmt)[1] / (10 ** 9) + posq = self.player.query_position(fmt) + if not posq[0]: + raise QueryError("query_position failed") + pos = posq[1] / (10 ** 9) + + lengthq = self.player.query_duration(fmt) + if not lengthq[0]: + raise QueryError("query_duration failed") + length = lengthq[1] / (10 ** 9) + self.cached_time = (pos, length) return (pos, length) - except Exception: + except QueryError: # Stream not ready. For small gaps of time, for instance # after seeking, the time values are unavailable. For this # reason, we cache recent.