[rygel-grilo] Handle "updated" signal in server side
- From: Juan A. Suarez Romero <jasuarez src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [rygel-grilo] Handle "updated" signal in server side
- Date: Wed, 21 Apr 2010 14:00:50 +0000 (UTC)
commit ab4f7fa0702da2894468d34a14d90e3e724119b1
Author: Juan A. Suarez Romero <jasuarez igalia com>
Date: Wed Apr 21 11:05:12 2010 +0200
Handle "updated" signal in server side
Provide a function in server that client can invoke when an item changes.
data/media-server2.xml | 4 +++
lib/media-server2-server-glue.h | 6 ++--
lib/media-server2-server.c | 41 +++++++++++++++++++++++++++++++++++++++
lib/media-server2-server.h | 6 +++++
4 files changed, 54 insertions(+), 3 deletions(-)
---
diff --git a/data/media-server2.xml b/data/media-server2.xml
index e03a253..c056bf9 100644
--- a/data/media-server2.xml
+++ b/data/media-server2.xml
@@ -21,5 +21,9 @@
<arg name="properties" direction="out" type="av"/>
</method>
+ <signal name="Updated">
+ <arg name="id" type="s"/>
+ </signal>
+
</interface>
</node>
diff --git a/lib/media-server2-server-glue.h b/lib/media-server2-server-glue.h
index cf409aa..e32f325 100644
--- a/lib/media-server2-server-glue.h
+++ b/lib/media-server2-server-glue.h
@@ -53,7 +53,7 @@ G_BEGIN_DECLS
#endif /* !G_ENABLE_DEBUG */
-/* NONE:STRING,UINT,INT,BOXED,POINTER (/tmp/dbus-binding-tool-c-marshallers.SI92AV:1) */
+/* NONE:STRING,UINT,INT,BOXED,POINTER (/tmp/dbus-binding-tool-c-marshallers.A4EIBV:1) */
extern void dbus_glib_marshal_ms2_server_VOID__STRING_UINT_INT_BOXED_POINTER (GClosure *closure,
GValue *return_value,
guint n_param_values,
@@ -103,7 +103,7 @@ dbus_glib_marshal_ms2_server_VOID__STRING_UINT_INT_BOXED_POINTER (GClosure *
}
#define dbus_glib_marshal_ms2_server_NONE__STRING_UINT_INT_BOXED_POINTER dbus_glib_marshal_ms2_server_VOID__STRING_UINT_INT_BOXED_POINTER
-/* NONE:STRING,BOXED,POINTER (/tmp/dbus-binding-tool-c-marshallers.SI92AV:2) */
+/* NONE:STRING,BOXED,POINTER (/tmp/dbus-binding-tool-c-marshallers.A4EIBV:2) */
extern void dbus_glib_marshal_ms2_server_VOID__STRING_BOXED_POINTER (GClosure *closure,
GValue *return_value,
guint n_param_values,
@@ -164,7 +164,7 @@ const DBusGObjectInfo dbus_glib_ms2_server_object_info = {
dbus_glib_ms2_server_methods,
2,
"org.gnome.UPnP.MediaServer2\0GetChildren\0A\0id\0I\0s\0offset\0I\0u\0max_count\0I\0i\0filter\0I\0as\0children\0O\0F\0N\0aav\0\0org.gnome.UPnP.MediaServer2\0GetProperties\0A\0id\0I\0s\0filter\0I\0as\0properties\0O\0F\0N\0av\0\0\0",
-"\0",
+"org.gnome.UPnP.MediaServer2\0Updated\0\0",
"\0"
};
diff --git a/lib/media-server2-server.c b/lib/media-server2-server.c
index 3c7939c..3eadbc2 100644
--- a/lib/media-server2-server.c
+++ b/lib/media-server2-server.c
@@ -37,6 +37,11 @@
#define MS2_SERVER_GET_PRIVATE(o) \
G_TYPE_INSTANCE_GET_PRIVATE((o), MS2_TYPE_SERVER, MS2ServerPrivate)
+enum {
+ UPDATED,
+ LAST_SIGNAL
+};
+
/*
* Private MS2Server structure
* data: holds stuff for owner
@@ -49,6 +54,8 @@ struct _MS2ServerPrivate {
GetPropertiesFunc get_properties;
};
+static guint32 signals[LAST_SIGNAL] = { 0 };
+
G_DEFINE_TYPE (MS2Server, ms2_server, G_TYPE_OBJECT);
/******************** PRIVATE API ********************/
@@ -272,6 +279,17 @@ ms2_server_class_init (MS2ServerClass *klass)
{
g_type_class_add_private (klass, sizeof (MS2ServerPrivate));
+ signals[UPDATED] = g_signal_new ("updated",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_FIRST | G_SIGNAL_NO_RECURSE,
+ G_STRUCT_OFFSET (MS2ServerClass, updated),
+ NULL,
+ NULL,
+ g_cclosure_marshal_VOID__STRING,
+ G_TYPE_NONE,
+ 1,
+ G_TYPE_STRING);
+
/* Register introspection */
dbus_g_object_type_install_info (MS2_TYPE_SERVER,
&dbus_glib_ms2_server_object_info);
@@ -519,6 +537,29 @@ ms2_server_set_get_children_func (MS2Server *server,
server->priv->get_children = get_children_func;
}
+/**
+ * ms2_server_updated:
+ * @server: a #MS2Server
+ * @id: item identifier that has changed
+ *
+ * Emit a signal notifying an item has changed.
+ *
+ * Which shall be triggered when a new child item is created or removed from
+ * container, or one of the existing child items is modified, or any of the
+ * properties of the container itself are modified. While the signal should be
+ * emitted when child containers are created or removed, it shall not be emitted
+ * when child containers are modified: instead the signal should be emitted on
+ * the child in this case. It up to client to follow these rules when invoking
+ * this method
+ **/
+void
+ms2_server_updated (MS2Server *server,
+ const gchar *id)
+{
+ g_return_if_fail (MS2_IS_SERVER (server));
+
+ g_signal_emit (server, signals[UPDATED], 0, id);
+}
/********** PROPERTIES TABLE API **********/
diff --git a/lib/media-server2-server.h b/lib/media-server2-server.h
index 8f04c11..7e277af 100644
--- a/lib/media-server2-server.h
+++ b/lib/media-server2-server.h
@@ -82,6 +82,9 @@ typedef struct _MS2ServerClass MS2ServerClass;
struct _MS2ServerClass {
GObjectClass parent_class;
+
+ void (*updated) (MS2Server *server,
+ const gchar *id);
};
GType ms2_server_get_type (void);
@@ -95,6 +98,9 @@ void ms2_server_set_get_properties_func (MS2Server *server,
void ms2_server_set_get_children_func (MS2Server *server,
GetChildrenFunc get_children_func);
+void ms2_server_updated (MS2Server *server,
+ const gchar *id);
+
GHashTable *ms2_server_new_properties_hashtable (const gchar *id);
void ms2_server_set_parent (GHashTable *properties,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]