summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJussi Kukkonen <jussi.kukkonen@intel.com>2013-02-20 17:03:23 +0200
committerMark Ryan <mark.d.ryan@intel.com>2013-03-06 15:47:44 +0100
commit126bd470a4161279081f741edad223709531f1c4 (patch)
tree6fb68527f1773fe31a68a0c0ef1296a81fbf68ca
parent6c07cc5fbd2a9ffcbeca37be6a2d06e1e9a59f28 (diff)
downloaddleyna-control-126bd470a4161279081f741edad223709531f1c4.tar.gz
[Player] Update UI based only on gstreamer state
This is simpler and less error-prone than doing it both from gstreamer and UI event handlers. Signed-off-by: Jussi Kukkonen <jussi.kukkonen@intel.com>
-rw-r--r--src/msd/msd_player.py77
1 files changed, 43 insertions, 34 deletions
diff --git a/src/msd/msd_player.py b/src/msd/msd_player.py
index 6f55551..e2cba6e 100644
--- a/src/msd/msd_player.py
+++ b/src/msd/msd_player.py
@@ -133,23 +133,14 @@ class GStreamerWindow(PlayWindowBase):
self.__duration = -1
self.__update_pos_id = 0
self.__adjustment = None
+ self.__state = gst.STATE_NULL
self.player.set_state(gst.STATE_PLAYING)
def __play_pause(self, button):
- if (self.player.get_state()[1] == gst.STATE_PLAYING):
+ if (self.__state == gst.STATE_PLAYING):
self.player.set_state(gst.STATE_PAUSED)
- self.__play_pause_image.set_from_stock (gtk.STOCK_MEDIA_PLAY,
- gtk.ICON_SIZE_BUTTON)
- self.__scale.set_sensitive(True)
- if self.__update_pos_id != 0:
- glib.source_remove(self.__update_pos_id)
- self.__update_pos_id = 0
else:
self.player.set_state(gst.STATE_PLAYING)
- self.__play_pause_image.set_from_stock(gtk.STOCK_MEDIA_PAUSE,
- gtk.ICON_SIZE_BUTTON)
-
- self.__scale.set_sensitive(False)
def __update_pos(self, user_data=None):
try:
@@ -181,35 +172,53 @@ class GStreamerWindow(PlayWindowBase):
pos = int(self.__adjustment.get_value())
return str(datetime.timedelta(seconds=pos))
+ def __update_ui(self, state):
+ if self.__state == state:
+ return
+ self.__state = state
+
+ if self.__duration == -1 and (self.__state == gst.STATE_PLAYING or
+ self.__state == gst.STATE_PAUSED):
+ try:
+ duration = self.player.query_duration(gst.FORMAT_TIME,
+ None)[0]
+ if duration != -1:
+ self.__duration = duration / 1000000000
+ self.__adjustment = gtk.Adjustment(0, 0,
+ self.__duration,
+ .5, .5, 0)
+ self.__scale.set_adjustment(self.__adjustment)
+ self.__scale.set_sensitive(False)
+ self.__adjustment.connect("value-changed",
+ self.__adjusted)
+ self.__scale.connect("format-value", self.__format_time)
+ self.__scale.show()
+ except Exception:
+ pass
+
+ if self.__state == gst.STATE_PLAYING:
+ self.__play_pause_image.set_from_stock(gtk.STOCK_MEDIA_PAUSE,
+ gtk.ICON_SIZE_BUTTON)
+ self.__scale.set_sensitive(False)
+ if self.__update_pos_id == 0:
+ self.__update_pos_id = glib.timeout_add(500,
+ self.__update_pos,
+ None)
+ else:
+ self.__play_pause_image.set_from_stock(gtk.STOCK_MEDIA_PLAY,
+ gtk.ICON_SIZE_BUTTON)
+ self.__scale.set_sensitive(True)
+ if self.__update_pos_id != 0:
+ glib.source_remove(self.__update_pos_id)
+ self.__update_pos_id = 0
+
def gs_message_cb(self, bus, message):
if message.type == gst.MESSAGE_EOS or message.type == gst.MESSAGE_ERROR:
self.__seek(0)
self.player.set_state(gst.STATE_PAUSED)
elif message.type == gst.MESSAGE_STATE_CHANGED:
(old, state, pending) = message.parse_state_changed()
- if self.__duration == -1 and (state == gst.STATE_PLAYING or
- state == gst.STATE_PAUSED):
- try:
- duration = self.player.query_duration(gst.FORMAT_TIME,
- None)[0]
- if duration != -1:
- self.__duration = duration / 1000000000
- self.__adjustment = gtk.Adjustment(0, 0,
- self.__duration,
- .5, .5, 0)
- self.__scale.set_adjustment(self.__adjustment)
- self.__scale.set_sensitive(False)
- self.__adjustment.connect("value-changed",
- self.__adjusted)
- self.__scale.connect("format-value", self.__format_time)
- self.__scale.show()
- except Exception:
- pass
-
- if state == gst.STATE_PLAYING and self.__update_pos_id == 0:
- self.__update_pos_id = glib.timeout_add(500,
- self.__update_pos,
- None)
+ self.__update_ui (state)
elif message.type == gst.MESSAGE_ASYNC_DONE:
self.__update_pos()