summaryrefslogtreecommitdiff
path: root/libdleyna
diff options
context:
space:
mode:
authorRegis Merlino <regis.merlino@intel.com>2013-07-19 10:46:32 +0200
committerLudovic Ferrandis <ludovic.ferrandis@intel.com>2013-07-19 17:12:15 +0200
commitbea777685ef0638ee3c5f289bceab20fdba585ad (patch)
treed9fd07f5f48e9fe6d3b878fc812d527e3c15d2ab /libdleyna
parent0929fad2dac970ae9e9ea90f135faca8809ea680 (diff)
downloaddleyna-renderer-bea777685ef0638ee3c5f289bceab20fdba585ad.tar.gz
[Player] Add OpenNextUri() method
Based on original work from Sébastien Bianti <sebastien.bianti@linux.intel.com> - Resolves bug #35 - Documentation updated. Signed-off-by: Regis Merlino <regis.merlino@intel.com>
Diffstat (limited to 'libdleyna')
-rw-r--r--libdleyna/renderer/device.c27
-rw-r--r--libdleyna/renderer/server.c11
-rw-r--r--libdleyna/renderer/task.c48
-rw-r--r--libdleyna/renderer/task.h7
4 files changed, 75 insertions, 18 deletions
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[] =
" <arg type='s' name='"DLR_INTERFACE_METADATA"'"
" direction='in'/>"
" </method>"
+ " <method name='"DLR_INTERFACE_OPEN_NEXT_URI"'>"
+ " <arg type='s' name='"DLR_INTERFACE_URI"'"
+ " direction='in'/>"
+ " <arg type='s' name='"DLR_INTERFACE_METADATA"'"
+ " direction='in'/>"
+ " </method>"
" <method name='"DLR_INTERFACE_SET_URI"'>"
" <arg type='s' name='"DLR_INTERFACE_URI"'"
" direction='in'/>"
@@ -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);