diff options
author | Luis de Bethencourt <luis.debethencourt@collabora.com> | 2011-05-19 19:22:03 +0200 |
---|---|---|
committer | Luis de Bethencourt <luis@debethencourt.com> | 2011-05-19 19:24:03 +0200 |
commit | 458ab2be14c7d586bab2e56d36040d6fb573851f (patch) | |
tree | 8d29e72fa797eb174451b78bc0cc4e7d4551ad9d | |
parent | d7010b9d36fa2d6deb41b83443b4197b84906e2b (diff) |
dlna: handling seek call
-rw-r--r-- | src/dlna.c | 16 | ||||
-rw-r--r-- | src/gst_engine.c | 4 | ||||
-rw-r--r-- | src/gst_engine.h | 2 | ||||
-rw-r--r-- | src/user_interface.c | 4 |
4 files changed, 20 insertions, 6 deletions
@@ -284,6 +284,7 @@ handle_method_call (GDBusConnection * connection, if (g_strcmp0 (method_name, "OpenUri") == 0) { gchar *uri; + // g_print ("openUri.. uri: %s\n", uri); g_variant_get (parameters, "(s)", &uri); my_object_change_uri (myobj, uri); @@ -293,16 +294,29 @@ handle_method_call (GDBusConnection * connection, /// ToDo: next track call handle_result (invocation, ret, error); + } else if (g_strcmp0 (method_name, "Play") == 0) { engine_play (myobj->engine); handle_result (invocation, ret, error); + } else if (g_strcmp0 (method_name, "Stop") == 0) { engine_stop (myobj->engine); handle_result (invocation, ret, error); - } + } else if (g_strcmp0 (method_name, "Seek") == 0) { + gint64 offset, position; + gfloat relative; + + g_variant_get (parameters, "(x)", &offset); + relative = offset / 100000000.0; + position = myobj->engine->media_duration * relative; + // g_print ("offset: %ld relative: %f", offset, relative); + engine_seek (myobj->engine, position); + + handle_result (invocation, ret, error); + } } GVariant * diff --git a/src/gst_engine.c b/src/gst_engine.c index 621dd08..7da81e5 100644 --- a/src/gst_engine.c +++ b/src/gst_engine.c @@ -334,7 +334,7 @@ bus_call (GstBus * bus, GstMessage * msg, gpointer data) position = is_uri_unfinished_playback (engine, engine->uri); if (position != -1) { - seek (engine, position); + engine_seek (engine, position); } add_uri_to_history (engine->uri); @@ -511,7 +511,7 @@ query_position (GstEngine * engine) } gboolean -seek (GstEngine * engine, gint64 position) +engine_seek (GstEngine * engine, gint64 position) { GstFormat fmt = GST_FORMAT_TIME; diff --git a/src/gst_engine.h b/src/gst_engine.h index 8449799..401e5e1 100644 --- a/src/gst_engine.h +++ b/src/gst_engine.h @@ -60,7 +60,7 @@ gboolean frame_stepping (GstEngine * engine, gboolean foward); gchar **get_recently_played (); GstState get_state (GstEngine * engine); gint64 query_position (GstEngine * engine); -gboolean seek (GstEngine * engine, gint64 position); +gboolean engine_seek (GstEngine * engine, gint64 position); gboolean change_state (GstEngine * engine, gchar * state); gboolean update_media_duration (GstEngine * engine); diff --git a/src/user_interface.c b/src/user_interface.c index 2b0ce10..ce0bcd4 100644 --- a/src/user_interface.c +++ b/src/user_interface.c @@ -182,7 +182,7 @@ event_cb (ClutterStage * stage, ClutterEvent * event, UserInterface * ui) /* clamp the timestamp to be within the media */ pos = CLAMP (pos, 0, ui->engine->media_duration); - seek (ui->engine, pos); + engine_seek (ui->engine, pos); progress = (float) pos / ui->engine->media_duration; clutter_actor_set_size (ui->control_seekbar, @@ -246,7 +246,7 @@ event_cb (ClutterStage * stage, ClutterEvent * event, UserInterface * ui) } progress = ui->engine->media_duration * (dist / ui->seek_width); - seek (ui->engine, progress); + engine_seek (ui->engine, progress); clutter_actor_set_size (ui->control_seekbar, dist, ui->seek_height); progress_update_text (ui); |