From bea777685ef0638ee3c5f289bceab20fdba585ad Mon Sep 17 00:00:00 2001 From: Regis Merlino Date: Fri, 19 Jul 2013 10:46:32 +0200 Subject: [Player] Add OpenNextUri() method MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Based on original work from Sébastien Bianti - Resolves bug #35 - Documentation updated. Signed-off-by: Regis Merlino --- libdleyna/renderer/device.c | 27 ++++++++++++++++++------- libdleyna/renderer/server.c | 11 +++++++++++ libdleyna/renderer/task.c | 48 ++++++++++++++++++++++++++++++++++----------- libdleyna/renderer/task.h | 7 +++++++ 4 files changed, 75 insertions(+), 18 deletions(-) (limited to 'libdleyna') diff --git a/libdleyna/renderer/device.c b/libdleyna/renderer/device.c index 00bb833..d01fec2 100644 --- a/libdleyna/renderer/device.c +++ b/libdleyna/renderer/device.c @@ -202,7 +202,7 @@ static void prv_emit_signal_properties_changed(dlr_device_t *device, const char *interface, GVariant *changed_props) { -#if DLR_LOG_LEVEL & DLR_LOG_LEVEL_DEBUG +#if DLEYNA_LOG_LEVEL & DLEYNA_LOG_LEVEL_DEBUG gchar *params; #endif GVariant *val = g_variant_ref_sink(g_variant_new("(s@a{sv}as)", @@ -215,7 +215,7 @@ static void prv_emit_signal_properties_changed(dlr_device_t *device, DLR_INTERFACE_PROPERTIES_CHANGED, device->path); -#if DLR_LOG_LEVEL & DLR_LOG_LEVEL_DEBUG +#if DLEYNA_LOG_LEVEL & DLEYNA_LOG_LEVEL_DEBUG params = g_variant_print(val, FALSE); DLEYNA_LOG_DEBUG("Params: %s", params); g_free(params); @@ -2501,6 +2501,9 @@ static void prv_open_uri_cb(GUPnPServiceProxy *proxy, { dlr_async_task_t *cb_data = user_data; GError *upnp_error = NULL; +#if DLEYNA_LOG_LEVEL & DLEYNA_LOG_LEVEL_DEBUG + gchar *type; +#endif if (!gupnp_service_proxy_end_action(cb_data->proxy, cb_data->action, &upnp_error, NULL)) { @@ -2515,8 +2518,16 @@ static void prv_open_uri_cb(GUPnPServiceProxy *proxy, prv_reset_transport_speed_props(cb_data->device); - DLEYNA_LOG_DEBUG("Task: %s", (cb_data->task.type == DLR_TASK_OPEN_URI) - ? "OPEN URI" : "SET URI"); +#if DLEYNA_LOG_LEVEL & DLEYNA_LOG_LEVEL_DEBUG + if (cb_data->task.type == DLR_TASK_OPEN_URI) + type = "OPEN URI"; + else if (cb_data->task.type == DLR_TASK_OPEN_NEXT_URI) + type = "OPEN NEXT URI"; + else if (cb_data->task.type == DLR_TASK_SET_URI) + type = "SET URI"; + + DLEYNA_LOG_DEBUG("Task: %s", type); +#endif if (cb_data->task.type == DLR_TASK_OPEN_URI) { cb_data->action = @@ -2550,6 +2561,7 @@ void dlr_device_open_uri(dlr_device_t *device, dlr_task_t *task, DLEYNA_LOG_INFO("URI: %s", open_uri_data->uri); DLEYNA_LOG_INFO("METADATA: %s", metadata ? metadata : "Not provided"); + DLEYNA_LOG_INFO("ACTION: %s", open_uri_data->operation); context = dlr_device_get_context(device); cb_data->cb = cb; @@ -2566,13 +2578,14 @@ void dlr_device_open_uri(dlr_device_t *device, dlr_task_t *task, cb_data->action = gupnp_service_proxy_begin_action(cb_data->proxy, - "SetAVTransportURI", + open_uri_data->operation, prv_open_uri_cb, cb_data, "InstanceID", G_TYPE_INT, 0, - "CurrentURI", G_TYPE_STRING, + open_uri_data->uri_type, + G_TYPE_STRING, open_uri_data->uri, - "CurrentURIMetaData", + open_uri_data->metadata_type, G_TYPE_STRING, metadata ? metadata : "", NULL); diff --git a/libdleyna/renderer/server.c b/libdleyna/renderer/server.c index 425d8f5..ea18689 100644 --- a/libdleyna/renderer/server.c +++ b/libdleyna/renderer/server.c @@ -91,6 +91,7 @@ #define DLR_INTERFACE_STOP "Stop" #define DLR_INTERFACE_OPEN_URI "OpenUri" #define DLR_INTERFACE_OPEN_URI_EX "OpenUriEx" +#define DLR_INTERFACE_OPEN_NEXT_URI "OpenNextUri" #define DLR_INTERFACE_SET_URI "SetUri" #define DLR_INTERFACE_SEEK "Seek" #define DLR_INTERFACE_SET_POSITION "SetPosition" @@ -214,6 +215,12 @@ static const gchar g_server_introspection[] = " " " " + " " + " " + " " + " " " " " " @@ -501,6 +508,7 @@ static void prv_process_async_task(dlr_task_t *task) prv_async_task_complete); break; case DLR_TASK_OPEN_URI: + case DLR_TASK_OPEN_NEXT_URI: case DLR_TASK_SET_URI: dlr_upnp_open_uri(g_context.upnp, task, prv_async_task_complete); @@ -793,6 +801,9 @@ static void prv_dlr_player_method_call(dleyna_connector_id_t conn, task = dlr_task_open_uri_new(invocation, object, parameters); else if (!strcmp(method, DLR_INTERFACE_OPEN_URI_EX)) task = dlr_task_open_uri_ex_new(invocation, object, parameters); + else if (!strcmp(method, DLR_INTERFACE_OPEN_NEXT_URI)) + task = dlr_task_open_next_uri_new(invocation, object, + parameters); else if (!strcmp(method, DLR_INTERFACE_SET_URI)) task = dlr_task_set_uri_new(invocation, object, parameters); else if (!strcmp(method, DLR_INTERFACE_SEEK)) diff --git a/libdleyna/renderer/task.c b/libdleyna/renderer/task.c index 6058a41..d168f8b 100644 --- a/libdleyna/renderer/task.c +++ b/libdleyna/renderer/task.c @@ -102,9 +102,13 @@ static void prv_dlr_task_delete(dlr_task_t *task) g_variant_unref(task->ut.set_prop.params); break; case DLR_TASK_OPEN_URI: + case DLR_TASK_OPEN_NEXT_URI: case DLR_TASK_SET_URI: g_free(task->ut.open_uri.uri); g_free(task->ut.open_uri.metadata); + g_free(task->ut.open_uri.operation); + g_free(task->ut.open_uri.uri_type); + g_free(task->ut.open_uri.metadata_type); break; case DLR_TASK_HOST_URI: case DLR_TASK_REMOVE_URI: @@ -276,6 +280,23 @@ dlr_task_t *dlr_task_open_uri_new(dleyna_connector_msg_id_t invocation, return task; } +static dlr_task_t *prv_open_uri_ex_generic(dlr_task_t *task, + GVariant *parameters, + const gchar *operation, + const gchar *uri_type, + const gchar *metadata_type) +{ + g_variant_get(parameters, "(ss)", &task->ut.open_uri.uri, + &task->ut.open_uri.metadata); + g_strstrip(task->ut.open_uri.uri); + g_strstrip(task->ut.open_uri.metadata); + task->ut.open_uri.operation = g_strdup(operation); + task->ut.open_uri.uri_type = g_strdup(uri_type); + task->ut.open_uri.metadata_type = g_strdup(metadata_type); + + return task; +} + dlr_task_t *dlr_task_open_uri_ex_new(dleyna_connector_msg_id_t invocation, const gchar *path, GVariant *parameters) { @@ -284,12 +305,21 @@ dlr_task_t *dlr_task_open_uri_ex_new(dleyna_connector_msg_id_t invocation, task = prv_device_task_new(DLR_TASK_OPEN_URI, invocation, path, NULL); - g_variant_get(parameters, "(ss)", - &task->ut.open_uri.uri, &task->ut.open_uri.metadata); - g_strstrip(task->ut.open_uri.uri); - g_strstrip(task->ut.open_uri.metadata); + return prv_open_uri_ex_generic(task, parameters, "SetAVTransportURI", + "CurrentURI", "CurrentURIMetaData"); +} - return task; +dlr_task_t *dlr_task_open_next_uri_new(dleyna_connector_msg_id_t invocation, + const gchar *path, GVariant *parameters) +{ + dlr_task_t *task; + + task = prv_device_task_new(DLR_TASK_OPEN_NEXT_URI, invocation, path, + NULL); + + return prv_open_uri_ex_generic(task, parameters, + "SetNextAVTransportURI", "NextURI", + "NextURIMetaData"); } dlr_task_t *dlr_task_set_uri_new(dleyna_connector_msg_id_t invocation, @@ -300,12 +330,8 @@ dlr_task_t *dlr_task_set_uri_new(dleyna_connector_msg_id_t invocation, task = prv_device_task_new(DLR_TASK_SET_URI, invocation, path, NULL); - g_variant_get(parameters, "(ss)", - &task->ut.open_uri.uri, &task->ut.open_uri.metadata); - g_strstrip(task->ut.open_uri.uri); - g_strstrip(task->ut.open_uri.metadata); - - return task; + return prv_open_uri_ex_generic(task, parameters, "SetAVTransportURI", + "CurrentURI", "CurrentURIMetaData"); } dlr_task_t *dlr_task_host_uri_new(dleyna_connector_msg_id_t invocation, diff --git a/libdleyna/renderer/task.h b/libdleyna/renderer/task.h index c69e917..af75929 100644 --- a/libdleyna/renderer/task.h +++ b/libdleyna/renderer/task.h @@ -45,6 +45,7 @@ enum dlr_task_type_t_ { DLR_TASK_NEXT, DLR_TASK_PREVIOUS, DLR_TASK_OPEN_URI, + DLR_TASK_OPEN_NEXT_URI, DLR_TASK_SET_URI, DLR_TASK_SEEK, DLR_TASK_SET_POSITION, @@ -79,6 +80,9 @@ typedef struct dlr_task_open_uri_t_ dlr_task_open_uri_t; struct dlr_task_open_uri_t_ { gchar *uri; gchar *metadata; + gchar *operation; + gchar *uri_type; + gchar *metadata_type; }; typedef struct dlr_task_seek_t_ dlr_task_seek_t; @@ -172,6 +176,9 @@ dlr_task_t *dlr_task_open_uri_new(dleyna_connector_msg_id_t invocation, dlr_task_t *dlr_task_open_uri_ex_new(dleyna_connector_msg_id_t invocation, const gchar *path, GVariant *parameters); +dlr_task_t *dlr_task_open_next_uri_new(dleyna_connector_msg_id_t invocation, + const gchar *path, GVariant *parameters); + dlr_task_t *dlr_task_set_uri_new(dleyna_connector_msg_id_t invocation, const gchar *path, GVariant *parameters); -- cgit v1.2.1