Updating branch refs/heads/master to ed2adfb6e94944cb2a19bf8f9e3dd0e92afcb686 (commit) from ff441e3e265ef10dc0dca7f17e8666f3571a77d6 (commit)
commit ed2adfb6e94944cb2a19bf8f9e3dd0e92afcb686 Author: Sean Davis <smd.seanda...@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); } _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org https://mail.xfce.org/mailman/listinfo/xfce4-commits