[Pkg-telepathy-commits] [telepathy-glib-1] 149/212: TpExportableChannel: turn channel-properties into a GVariant

Simon McVittie smcv at debian.org
Wed May 14 12:09:08 UTC 2014


This is an automated email from the git hooks/post-receive script.

smcv pushed a commit to branch debian
in repository telepathy-glib-1.

commit 8b1c15270436161d21070a6ad2cceb6b62b87260
Author: Simon McVittie <simon.mcvittie at collabora.co.uk>
Date:   Tue Apr 8 15:42:13 2014 +0100

    TpExportableChannel: turn channel-properties into a GVariant
    
    Bug: https://bugs.freedesktop.org/show_bug.cgi?id=77187
    Reviewed-by: Xavier Claessens
---
 telepathy-glib/base-channel.c            |  4 +++-
 telepathy-glib/base-connection.c         | 11 +++++++++--
 telepathy-glib/channel-manager-request.c | 13 +++++++------
 telepathy-glib/exportable-channel.c      | 18 ++++++++++--------
 tests/dbus/channel.c                     | 14 ++++++++------
 tests/dbus/dbus-tube.c                   | 10 ++++++----
 tests/dbus/file-transfer-channel.c       |  6 +++---
 tests/dbus/stream-tube.c                 | 10 ++++++----
 tests/dbus/text-channel.c                | 10 +++++-----
 tests/lib/simple-conn.c                  | 21 ++++++++++++++++++---
 10 files changed, 75 insertions(+), 42 deletions(-)

diff --git a/telepathy-glib/base-channel.c b/telepathy-glib/base-channel.c
index 8d7bd90..e8eecb8 100644
--- a/telepathy-glib/base-channel.c
+++ b/telepathy-glib/base-channel.c
@@ -304,6 +304,7 @@
 
 #include <dbus/dbus-glib-lowlevel.h>
 
+#include <telepathy-glib/asv.h>
 #include <telepathy-glib/channel-iface.h>
 #include <telepathy-glib/dbus.h>
 #include <telepathy-glib/exportable-channel.h>
@@ -885,7 +886,8 @@ tp_base_channel_get_property (GObject *object,
           if (klass->fill_immutable_properties)
             klass->fill_immutable_properties (chan, properties);
 
-          g_value_take_boxed (value, properties);
+          g_value_set_variant (value, tp_asv_to_vardict (properties));
+          g_hash_table_unref (properties);
         }
       break;
     default:
diff --git a/telepathy-glib/base-connection.c b/telepathy-glib/base-connection.c
index 4d8c716..ce84808 100644
--- a/telepathy-glib/base-connection.c
+++ b/telepathy-glib/base-connection.c
@@ -561,15 +561,18 @@ get_channel_details (GObject *obj)
 {
   GValueArray *structure;
   GHashTable *table;
+  GVariant *variant;
   gchar *object_path;
 
   g_assert (TP_IS_EXPORTABLE_CHANNEL (obj));
 
   g_object_get (obj,
       "object-path", &object_path,
-      "channel-properties", &table,
+      "channel-properties", &variant,
       NULL);
 
+  table = tp_asv_from_vardict (variant);
+
   structure = tp_value_array_build (2,
       DBUS_TYPE_G_OBJECT_PATH, object_path,
       TP_HASH_TYPE_QUALIFIED_PROPERTY_VALUE_MAP, table,
@@ -577,6 +580,7 @@ get_channel_details (GObject *obj)
 
   g_free (object_path);
   g_hash_table_unref (table);
+  g_variant_unref (variant);
 
   return structure;
 }
@@ -667,6 +671,7 @@ manager_new_channel_cb (TpChannelManager *manager,
     TpBaseConnection *self)
 {
   gchar *path;
+  GVariant *variant;
   GHashTable *props;
 
   g_assert (TP_IS_CHANNEL_MANAGER (manager));
@@ -677,14 +682,16 @@ manager_new_channel_cb (TpChannelManager *manager,
 
   g_object_get (channel,
       "object-path", &path,
-      "channel-properties", &props,
+      "channel-properties", &variant,
       NULL);
 
+  props = tp_asv_from_vardict (variant);
   tp_svc_connection_interface_requests_emit_new_channel (self,
       path, props);
 
   g_free (path);
   g_hash_table_unref (props);
+  g_variant_unref (variant);
 }
 
 
diff --git a/telepathy-glib/channel-manager-request.c b/telepathy-glib/channel-manager-request.c
index e2ece2e..65b9ddc 100644
--- a/telepathy-glib/channel-manager-request.c
+++ b/telepathy-glib/channel-manager-request.c
@@ -143,7 +143,7 @@ _tp_channel_manager_request_satisfy (TpChannelManagerRequest *self,
     TpExportableChannel *channel)
 {
   gchar *object_path;
-  GHashTable *properties;
+  GVariant *properties;
 
   g_return_if_fail (TP_IS_EXPORTABLE_CHANNEL (channel));
   g_return_if_fail (self->context != NULL);
@@ -160,13 +160,14 @@ _tp_channel_manager_request_satisfy (TpChannelManagerRequest *self,
   switch (self->method)
     {
       case TP_CHANNEL_MANAGER_REQUEST_METHOD_CREATE_CHANNEL:
-        tp_svc_connection_interface_requests_return_from_create_channel (
-            self->context, object_path, properties);
+        g_dbus_method_invocation_return_value (self->context,
+            g_variant_new ("(o at a{sv})", object_path, properties));
         break;
 
       case TP_CHANNEL_MANAGER_REQUEST_METHOD_ENSURE_CHANNEL:
-        tp_svc_connection_interface_requests_return_from_ensure_channel (
-            self->context, self->yours, object_path, properties);
+        g_dbus_method_invocation_return_value (self->context,
+            g_variant_new ("(bo at a{sv})", self->yours, object_path,
+              properties));
         break;
 
       default:
@@ -176,7 +177,7 @@ _tp_channel_manager_request_satisfy (TpChannelManagerRequest *self,
   self->context = NULL;
 
   g_free (object_path);
-  g_hash_table_unref (properties);
+  g_variant_unref (properties);
 }
 
 void
diff --git a/telepathy-glib/exportable-channel.c b/telepathy-glib/exportable-channel.c
index 2fb2edb..a765595 100644
--- a/telepathy-glib/exportable-channel.c
+++ b/telepathy-glib/exportable-channel.c
@@ -88,7 +88,7 @@ exportable_channel_base_init (gpointer klass)
        *
        * The D-Bus properties to be announced in the NewChannels signal
        * and in the Channels property, as a map from
-       * interface.name.propertyname to GValue.
+       * interface.name.propertyname to variant.
        *
        * A channel's immutable properties are constant for its lifetime on the
        * bus, so this property should only change when the closed signal is
@@ -105,16 +105,14 @@ exportable_channel_base_init (gpointer klass)
        *
        * <informalexample><programlisting>
        *  case PROP_CHANNEL_PROPERTIES:
-       *    g_value_take_boxed (value,
-       *      tp_dbus_properties_mixin_make_properties_hash (object,
+       *    {
+       *      GHashTable *hash = tp_dbus_properties_mixin_make_properties_hash (object,
        *          // The spec says these properties MUST be included:
        *          TP_IFACE_CHANNEL, "TargetHandle",
        *          TP_IFACE_CHANNEL, "TargetEntityType",
        *          TP_IFACE_CHANNEL, "ChannelType",
        *          TP_IFACE_CHANNEL, "TargetID",
        *          TP_IFACE_CHANNEL, "Requested",
-       *          // These aren't mandatory as of spec 0.17.17
-       *          // (but they should be):
        *          TP_IFACE_CHANNEL, "InitiatorHandle",
        *          TP_IFACE_CHANNEL, "InitiatorID",
        *          TP_IFACE_CHANNEL, "Interfaces",
@@ -122,13 +120,17 @@ exportable_channel_base_init (gpointer klass)
        *          TP_IFACE_CHANNEL_INTERFACE_MESSAGES, "SupportedContentTypes",
        *          // etc.
        *          NULL));
+       *
+       *      g_value_set_variant (value, tp_asv_to_vardict (hash));
+       *      g_hash_table_unref (hash);
+       *    }
        *    break;
        * </programlisting></informalexample>
        */
-      param_spec = g_param_spec_boxed ("channel-properties",
+      param_spec = g_param_spec_variant ("channel-properties",
           "Channel properties",
-          "The channel properties",
-          TP_HASH_TYPE_QUALIFIED_PROPERTY_VALUE_MAP,
+          "The channel's immutable properties",
+          G_VARIANT_TYPE_VARDICT, NULL,
           G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
       g_object_interface_install_property (klass, param_spec);
 
diff --git a/tests/dbus/channel.c b/tests/dbus/channel.c
index c3da0f6..1de49ca 100644
--- a/tests/dbus/channel.c
+++ b/tests/dbus/channel.c
@@ -46,7 +46,7 @@ create_contact_chan (Test *test)
 {
   gchar *chan_path;
   TpHandle handle;
-  GHashTable *props;
+  GVariant *props;
 
   tp_clear_object (&test->chan_contact_service);
   tp_clear_object (&test->chan_room_service);
@@ -76,20 +76,21 @@ create_contact_chan (Test *test)
       "channel-properties", &props,
       NULL);
 
-  test->channel_contact = tp_tests_channel_new_from_properties (test->connection,
+  test->channel_contact = tp_client_factory_ensure_channel (
+      tp_proxy_get_factory (test->connection), test->connection,
       chan_path, props, &test->error);
   g_assert_no_error (test->error);
 
   g_free (chan_path);
 
-  g_hash_table_unref (props);
+  g_variant_unref (props);
 }
 
 static void
 create_room_chan (Test *test)
 {
   gchar *chan_path;
-  GHashTable *props;
+  GVariant *props;
 
   tp_clear_object (&test->chan_room_service);
 
@@ -111,7 +112,8 @@ create_room_chan (Test *test)
       "channel-properties", &props,
       NULL);
 
-  test->channel_room = tp_tests_channel_new_from_properties (test->connection,
+  test->channel_room = tp_client_factory_ensure_channel (
+      tp_proxy_get_factory (test->connection), test->connection,
       chan_path, props, &test->error);
   g_assert_no_error (test->error);
 
@@ -120,7 +122,7 @@ create_room_chan (Test *test)
 
   g_free (chan_path);
 
-  g_hash_table_unref (props);
+  g_variant_unref (props);
 }
 
 static void
diff --git a/tests/dbus/dbus-tube.c b/tests/dbus/dbus-tube.c
index 1c24867..fd72421 100644
--- a/tests/dbus/dbus-tube.c
+++ b/tests/dbus/dbus-tube.c
@@ -86,7 +86,7 @@ create_tube_service (Test *test,
 {
   gchar *chan_path;
   TpHandle handle, alf_handle;
-  GHashTable *props;
+  GVariant *props;
   GType type;
   TpClientFactory *factory;
 
@@ -136,18 +136,20 @@ create_tube_service (Test *test,
       NULL);
 
   /* Create client-side tube channel object */
-  g_object_get (test->tube_chan_service, "channel-properties", &props, NULL);
+  g_object_get (test->tube_chan_service,
+      "channel-properties", &props,
+      NULL);
 
   factory = tp_proxy_get_factory (test->connection);
   test->tube = (TpDBusTubeChannel *) tp_client_factory_ensure_channel (
-      factory, test->connection, chan_path, tp_asv_to_vardict (props),
+      factory, test->connection, chan_path, props,
       &test->error);
   g_assert (TP_IS_DBUS_TUBE_CHANNEL (test->tube));
 
   g_assert_no_error (test->error);
 
   g_free (chan_path);
-  g_hash_table_unref (props);
+  g_variant_unref (props);
 }
 
 /* Test Basis */
diff --git a/tests/dbus/file-transfer-channel.c b/tests/dbus/file-transfer-channel.c
index cd56b1e..4c946c0 100644
--- a/tests/dbus/file-transfer-channel.c
+++ b/tests/dbus/file-transfer-channel.c
@@ -158,7 +158,7 @@ create_file_transfer_channel (Test *test,
   TpClientFactory *factory;
   gchar *chan_path;
   TpHandle handle, alf_handle;
-  GHashTable *props;
+  GVariant *props;
   GHashTable *sockets;
   GHashTable *metadata;
   GQuark features[] = { TP_FILE_TRANSFER_CHANNEL_FEATURE_CORE, 0};
@@ -217,7 +217,7 @@ create_file_transfer_channel (Test *test,
 
   factory = tp_proxy_get_factory (test->connection);
   test->channel = TP_FILE_TRANSFER_CHANNEL (tp_client_factory_ensure_channel (
-      factory, test->connection, chan_path, tp_asv_to_vardict (props),
+      factory, test->connection, chan_path, props,
       &test->error));
   g_assert_no_error (test->error);
   g_assert (TP_IS_FILE_TRANSFER_CHANNEL (test->channel));
@@ -231,7 +231,7 @@ create_file_transfer_channel (Test *test,
 
   g_free (chan_path);
   g_hash_table_unref (metadata);
-  g_hash_table_unref (props);
+  g_variant_unref (props);
   g_hash_table_unref (sockets);
 }
 
diff --git a/tests/dbus/stream-tube.c b/tests/dbus/stream-tube.c
index a384297..a52b413 100644
--- a/tests/dbus/stream-tube.c
+++ b/tests/dbus/stream-tube.c
@@ -152,7 +152,7 @@ create_tube_service (Test *test,
   TpClientFactory *factory;
   gchar *chan_path;
   TpHandle handle, alf_handle;
-  GHashTable *props;
+  GVariant *props;
   GHashTable *sockets;
   GType type;
 
@@ -218,17 +218,19 @@ create_tube_service (Test *test,
       NULL);
 
   /* Create client-side tube channel object */
-  g_object_get (test->tube_chan_service, "channel-properties", &props, NULL);
+  g_object_get (test->tube_chan_service,
+      "channel-properties", &props,
+      NULL);
 
   factory = tp_proxy_get_factory (test->connection);
   test->tube = TP_STREAM_TUBE_CHANNEL (tp_client_factory_ensure_channel (
-      factory, test->connection, chan_path, tp_asv_to_vardict (props),
+      factory, test->connection, chan_path, props,
       &test->error));
   g_assert_no_error (test->error);
   g_assert (TP_IS_STREAM_TUBE_CHANNEL (test->tube));
 
   g_free (chan_path);
-  g_hash_table_unref (props);
+  g_variant_unref (props);
   g_hash_table_unref (sockets);
 }
 
diff --git a/tests/dbus/text-channel.c b/tests/dbus/text-channel.c
index 3466cc0..0bde787 100644
--- a/tests/dbus/text-channel.c
+++ b/tests/dbus/text-channel.c
@@ -54,7 +54,7 @@ create_contact_chan (Test *test)
 {
   TpClientFactory *factory;
   gchar *chan_path;
-  GHashTable *props;
+  GVariant *props;
 
   tp_clear_object (&test->chan_service);
   tp_clear_object (&test->sms_chan_service);
@@ -84,12 +84,12 @@ create_contact_chan (Test *test)
 
   factory = tp_proxy_get_factory (test->connection);
   test->channel = TP_TEXT_CHANNEL (tp_client_factory_ensure_channel (factory,
-      test->connection, chan_path, tp_asv_to_vardict (props), &test->error));
+      test->connection, chan_path, props, &test->error));
   g_assert_no_error (test->error);
   g_assert (TP_IS_TEXT_CHANNEL (test->channel));
 
   g_free (chan_path);
-  g_hash_table_unref (props);
+  g_variant_unref (props);
 
   /* Register channel implementing SMS */
   chan_path = g_strdup_printf ("%s/ChannelSMS",
@@ -108,13 +108,13 @@ create_contact_chan (Test *test)
       NULL);
 
   test->sms_channel = TP_TEXT_CHANNEL (tp_client_factory_ensure_channel (
-      factory, test->connection, chan_path, tp_asv_to_vardict (props),
+      factory, test->connection, chan_path, props,
       &test->error));
   g_assert_no_error (test->error);
   g_assert (TP_IS_TEXT_CHANNEL (test->sms_channel));
 
   g_free (chan_path);
-  g_hash_table_unref (props);
+  g_variant_unref (props);
 }
 
 static void
diff --git a/tests/lib/simple-conn.c b/tests/lib/simple-conn.c
index be1934d..6b2f492 100644
--- a/tests/lib/simple-conn.c
+++ b/tests/lib/simple-conn.c
@@ -335,7 +335,15 @@ tp_tests_simple_connection_ensure_text_chan (TpTestsSimpleConnection *self,
   g_object_get (chan, "object-path", &chan_path, NULL);
 
   if (props != NULL)
-    g_object_get (chan, "channel-properties", props, NULL);
+    {
+      GVariant *tmp;
+
+      g_object_get (chan,
+          "channel-properties", &tmp,
+          NULL);
+      *props = tp_asv_from_vardict (tmp);
+      g_variant_unref (tmp);
+    }
 
   return chan_path;
 }
@@ -379,8 +387,15 @@ tp_tests_simple_connection_ensure_room_list_chan (TpTestsSimpleConnection *self,
     }
 
   if (props != NULL)
-    g_object_get (self->priv->room_list_chan,
-        "channel-properties", props, NULL);
+    {
+      GVariant *tmp;
+
+      g_object_get (self->priv->room_list_chan,
+          "channel-properties", &tmp,
+          NULL);
+      *props = tp_asv_from_vardict (tmp);
+      g_variant_unref (tmp);
+    }
 
   return chan_path;
 }

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-telepathy/telepathy-glib-1.git



More information about the Pkg-telepathy-commits mailing list