[Xfce4-commits] <parole:master> Implement SeekBy and SetPosition

Sean Davis noreply at xfce.org
Thu Dec 12 00:18:31 CET 2013


Updating branch refs/heads/master
         to ed2adfb6e94944cb2a19bf8f9e3dd0e92afcb686 (commit)
       from ff441e3e265ef10dc0dca7f17e8666f3571a77d6 (commit)

commit ed2adfb6e94944cb2a19bf8f9e3dd0e92afcb686
Author: Sean Davis <smd.seandavis at gmail.com>
Date:   Sat Dec 7 16:27:07 2013 -0500

    Implement SeekBy and SetPosition

 src/misc/parole-provider-player.c    |    4 +--
 src/plugins/mpris2/Makefile.am       |    2 ++
 src/plugins/mpris2/mpris2-provider.c |   52 ++++++++++++++++++++++++++++++++--
 3 files changed, 54 insertions(+), 4 deletions(-)

diff --git a/src/misc/parole-provider-player.c b/src/misc/parole-provider-player.c
index e82303e..7ee95eb 100644
--- a/src/misc/parole-provider-player.c
+++ b/src/misc/parole-provider-player.c
@@ -403,10 +403,10 @@ gboolean parole_provider_player_seek (ParoleProviderPlayer *player, gdouble pos)
 }
 
 /**
- * parole_provider_player_get_fullscreen:
+ * parole_provider_player_get_stream_position:
  * @player: a #ParoleProviderPlayer
  * 
- * Get fullscreen status for Parole.
+ * Get stream position (microseconds) for Parole.
  * 
  * Since: 0.6
  **/
diff --git a/src/plugins/mpris2/Makefile.am b/src/plugins/mpris2/Makefile.am
index df747d1..ba9f37d 100644
--- a/src/plugins/mpris2/Makefile.am
+++ b/src/plugins/mpris2/Makefile.am
@@ -20,6 +20,7 @@ parole_mpris2_la_SOURCES =			\
 parole_mpris2_la_CFLAGS =			\
 	$(PLATFORM_CFLAGS)			\
 	$(GTK_CFLAGS)				\
+    $(GST_INTERFACES_CFLAGS)	\
 	$(LIBXFCE4UTIL_CFLAGS)
 
 parole_mpris2_la_LDFLAGS =			\
@@ -31,6 +32,7 @@ parole_mpris2_la_LDFLAGS =			\
 parole_mpris2_la_LIBADD =				\
 	$(top_builddir)/src/misc/libparole.la	\
 	$(GTK_LIBS)				\
+	$(GST_LIBS)             \
 	$(LIBXFCE4UTIL_LIBS)
 
 #
diff --git a/src/plugins/mpris2/mpris2-provider.c b/src/plugins/mpris2/mpris2-provider.c
index 3b5fb35..5b5f12a 100644
--- a/src/plugins/mpris2/mpris2-provider.c
+++ b/src/plugins/mpris2/mpris2-provider.c
@@ -24,6 +24,8 @@
 
 #include "mpris2-provider.h"
 
+#include <gst/tag/tag.h>
+
 static void   mpris2_provider_iface_init       (ParoleProviderPluginIface *iface);
 static void   mpris2_provider_finalize             (GObject                   *object);
 
@@ -329,13 +331,59 @@ static void mpris_Player_Stop (GDBusMethodInvocation *invocation, GVariant* para
 
 static void mpris_Player_Seek (GDBusMethodInvocation *invocation, GVariant* parameters, Mpris2Provider *provider)
 {
-    // TODO: Implement seek..
+    ParoleProviderPlayer *player = provider->player;
+
+    if(parole_provider_player_get_state (player) == PAROLE_STATE_STOPPED) {
+        g_dbus_method_invocation_return_error_literal (invocation,
+            G_DBUS_ERROR, G_DBUS_ERROR_FAILED, "Nothing to seek");
+        return;
+    }
+    
+    const ParoleStream *stream = parole_provider_player_get_stream(player);
+
+    gint64 param;
+    g_variant_get(parameters, "(x)", &param);
+
+    gint64 curr_pos = parole_provider_player_get_stream_position (player);
+    gint64 seek = (curr_pos + param) / GST_MSECOND;
+    
+    gint64 duration;
+    g_object_get (G_OBJECT (stream), "duration", &duration, NULL);
+    
+    seek = CLAMP (seek, 0, duration);
+
+    parole_provider_player_seek (player, seek);
+
     g_dbus_method_invocation_return_value (invocation, NULL);
 }
 
 static void mpris_Player_SetPosition (GDBusMethodInvocation *invocation, GVariant* parameters, Mpris2Provider *provider)
 {
-    // TODO: Implement set position..
+    ParoleProviderPlayer *player = provider->player;
+
+    if(parole_provider_player_get_state (player) == PAROLE_STATE_STOPPED) {
+        g_dbus_method_invocation_return_error_literal (invocation,
+            G_DBUS_ERROR, G_DBUS_ERROR_FAILED, "Nothing to seek");
+        return;
+    }
+    
+    const ParoleStream *stream = parole_provider_player_get_stream(player);
+    gchar *track_id = NULL;
+
+    /* Do we need to do anything with track_id? */
+    gint64 param;
+    g_variant_get(parameters, "(ox)", &track_id, &param);
+    g_free(track_id);
+
+    gint64 seek = param / GST_MSECOND;
+    
+    gint64 duration;
+    g_object_get (G_OBJECT (stream), "duration", &duration, NULL);
+    
+    seek = CLAMP (seek, 0, duration);
+
+    parole_provider_player_seek (player, seek);
+
     g_dbus_method_invocation_return_value (invocation, NULL);
 }
 


More information about the Xfce4-commits mailing list