]> git.0d.be Git - empathy.git/commitdiff
Watch the DBus signature of the param.
authorCosimo Cecchi <cosimoc@gnome.org>
Mon, 14 Sep 2009 10:09:50 +0000 (12:09 +0200)
committerCosimo Cecchi <cosimoc@gnome.org>
Mon, 14 Sep 2009 10:09:50 +0000 (12:09 +0200)
We used to hardcode UINT, but this does not work for haze CMs.

src/empathy-import-pidgin.c

index 877eb26b69fd1d89b500cb5f0bb9bb8a71de8af6..ccf0dac7aadeb38ae412a0188670f659d9ca7bb4 100644 (file)
@@ -26,6 +26,7 @@
 
 #include <glib.h>
 #include <glib/gstdio.h>
+#include <dbus/dbus-protocol.h>
 #include <libxml/parser.h>
 #include <libxml/tree.h>
 
@@ -139,12 +140,34 @@ import_dialog_pidgin_parse_setting (EmpathyImportAccountData *data,
     }
   else if (!tp_strdiff (type, "int"))
     {
+      TpConnectionManager *cm = NULL;
+      const TpConnectionManagerProtocol *proto;
+      const TpConnectionManagerParam *param;
+      const gchar *signature;
+      int signature_i;
+
+      if (!empathy_import_protocol_is_supported (data->protocol, &cm))
+        return;
+
+      proto = tp_connection_manager_get_protocol (cm, data->protocol);
+      param = tp_connection_manager_protocol_get_param (proto, item->cm_name);
+      signature = tp_connection_manager_param_get_dbus_signature (param);
+      signature_i = (int) (*signature);
+
       i = (gint) g_ascii_strtod (content, NULL);
-      /* FIXME: Pidgin uses signed int values whereas Telepathy usually
-       * uses unsigned int values.
-       */
-      value = tp_g_value_slice_new (G_TYPE_UINT);
-      g_value_set_uint (value, (guint) i);
+
+      if (signature_i == DBUS_TYPE_INT16 ||
+          signature_i == DBUS_TYPE_INT32)
+        {
+          value = tp_g_value_slice_new (G_TYPE_INT);
+          g_value_set_int (value, i);
+        }
+      else if (signature_i == DBUS_TYPE_UINT16 ||
+          signature_i == DBUS_TYPE_UINT32)
+        {
+          value = tp_g_value_slice_new (G_TYPE_UINT);
+          g_value_set_uint (value, (guint) i);
+        }
     }
   else if (!tp_strdiff (type, "string"))
     {