]> git.0d.be Git - empathy.git/blobdiff - libempathy/empathy-tp-contact-list.c
Also accept local-pending of publish if adding a contact
[empathy.git] / libempathy / empathy-tp-contact-list.c
index 051c342c99431f71bbcf1469f85c9afdd4c215a8..0237570a0d3e3557bfdecb0fcd957b86dc81bce4 100644 (file)
@@ -334,15 +334,24 @@ tp_contact_list_group_add (EmpathyTpContactList *list,
 
 static void
 tp_contact_list_got_added_members_cb (EmpathyTpContactFactory *factory,
-                                     GList                   *contacts,
+                                     guint                    n_contacts,
+                                     EmpathyContact * const * contacts,
+                                     guint                    n_failed,
+                                     const TpHandle          *failed,
+                                     const GError            *error,
                                      gpointer                 user_data,
                                      GObject                 *list)
 {
        EmpathyTpContactListPriv *priv = GET_PRIV (list);
-       GList *l;
+       guint i;
+
+       if (error) {
+               DEBUG ("Error: %s", error->message);
+               return;
+       }
 
-       for (l = contacts; l; l = l->next) {
-               EmpathyContact *contact = l->data;
+       for (i = 0; i < n_contacts; i++) {
+               EmpathyContact *contact = contacts[i];
                TpHandle handle;
 
                handle = empathy_contact_get_handle (contact);
@@ -367,15 +376,24 @@ tp_contact_list_got_added_members_cb (EmpathyTpContactFactory *factory,
 
 static void
 tp_contact_list_got_local_pending_cb (EmpathyTpContactFactory *factory,
-                                     GList                   *contacts,
-                                     gpointer                 info,
+                                     guint                    n_contacts,
+                                     EmpathyContact * const * contacts,
+                                     guint                    n_failed,
+                                     const TpHandle          *failed,
+                                     const GError            *error,
+                                     gpointer                 user_data,
                                      GObject                 *list)
 {
        EmpathyTpContactListPriv *priv = GET_PRIV (list);
-       GList *l;
+       guint i;
 
-       for (l = contacts; l; l = l->next) {
-               EmpathyContact *contact = l->data;
+       if (error) {
+               DEBUG ("Error: %s", error->message);
+               return;
+       }
+
+       for (i = 0; i < n_contacts; i++) {
+               EmpathyContact *contact = contacts[i];
                TpHandle handle;
                const gchar *message;
                TpChannelGroupChangeReason reason;
@@ -700,7 +718,7 @@ tp_contact_list_constructed (GObject *list)
 {
 
        EmpathyTpContactListPriv *priv = GET_PRIV (list);
-       const gchar              *protocol_name = NULL;
+       gchar                    *protocol_name = NULL;
        const gchar              *names[] = {NULL, NULL};
 
        priv->factory = empathy_tp_contact_factory_dup_singleton (priv->connection);
@@ -734,11 +752,13 @@ tp_contact_list_constructed (GObject *list)
 
        /* Check for protocols that does not support contact groups. We can
         * put all contacts into a special group in that case.
-        * FIXME: Default group should be an information in the profile */
-       //protocol_name = tp_connection_get_protocol (priv->connection);
+        * FIXME: Default group should be an information in the profile
+        * FIXME: replace with tp_connection_parse_object_path once released */
+       protocol_name = empathy_connection_get_protocol (priv->connection, NULL);
        if (!tp_strdiff (protocol_name, "local-xmpp")) {
                priv->protocol_group = _("People nearby");
        }
+       g_free (protocol_name);
 }
 
 static void
@@ -857,6 +877,11 @@ tp_contact_list_add (EmpathyContactList *list,
                tp_cli_channel_interface_group_call_add_members (priv->subscribe,
                        -1, &handles, message, NULL, NULL, NULL, NULL);
        }
+       if (priv->publish &&
+           g_hash_table_lookup (priv->pendings, GUINT_TO_POINTER (handle))) {
+               tp_cli_channel_interface_group_call_add_members (priv->publish,
+                       -1, &handles, message, NULL, NULL, NULL, NULL);
+       }
 }
 
 static void