[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)", ¶m);
+
+ 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, ¶m);
+ 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