[rygel-grilo] Handle "updated" signal in server side



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]