]> git.0d.be Git - empathy.git/commitdiff
Use tp-glib client API
authorXavier Claessens <xclaesse@src.gnome.org>
Fri, 11 Apr 2008 13:10:25 +0000 (13:10 +0000)
committerXavier Claessens <xclaesse@src.gnome.org>
Fri, 11 Apr 2008 13:10:25 +0000 (13:10 +0000)
svn path=/trunk/; revision=889

libempathy/empathy-tp-group.c
libempathy/empathy-tp-group.h

index 6357169d5f9aaa9252e6b59e172e334feee790f7..e851ecce4e43552b36d0d35ad0e7bec6c30371e3 100644 (file)
@@ -216,7 +216,7 @@ tp_group_update_members (EmpathyTpGroup *group,
                                     "  removed-len=%d\n"
                                     "  local-pending-len=%d, current-len=%d\n"
                                     "  remote-pending-len=%d, current-len=%d",
-                      empathy_tp_group_get_name (group),
+                      priv->group_name,
                       added ? added->len : 0, g_list_length (priv->members),
                       removed ? removed->len : 0,
                       local_pending ? local_pending->len : 0,
@@ -298,7 +298,7 @@ tp_group_update_members (EmpathyTpGroup *group,
                                     "  members-len=%d\n"
                                     "  local-pendings-len=%d\n"
                                     "  remote-pendings-len=%d",
-                      empathy_tp_group_get_name (group),
+                      priv->group_name,
                       g_list_length (priv->members),
                       g_list_length (priv->local_pendings),
                       g_list_length (priv->remote_pendings));
@@ -423,6 +423,24 @@ tp_group_get_remote_pending_cb (TpChannel    *channel,
                                 0);      /* reason */
 }
 
+static void
+tp_group_inspect_handles_cb (TpConnection  *connection,
+                            const gchar  **names,
+                            const GError  *error,
+                            gpointer       user_data,
+                            GObject       *group)
+{
+       EmpathyTpGroupPriv *priv = GET_PRIV (group);
+
+       if (error) {
+               empathy_debug (DEBUG_DOMAIN, "Failed to inspect channel handle: %s",
+                              error->message);
+               return;
+       }
+
+       priv->group_name = g_strdup (*names);
+}
+
 static void
 tp_group_invalidated_cb (TpProxy        *proxy,
                         guint           domain,
@@ -442,6 +460,10 @@ tp_group_get_self_handle_cb (TpChannel    *proxy,
                             GObject      *group)
 {
        EmpathyTpGroupPriv *priv = GET_PRIV (group);
+       TpConnection       *connection;
+       guint               channel_handle;
+       guint               channel_handle_type;
+       GArray             *handles;
 
        if (error) {
                empathy_debug (DEBUG_DOMAIN, "Failed to get self handle: %s",
@@ -449,13 +471,29 @@ tp_group_get_self_handle_cb (TpChannel    *proxy,
                return;
        }
 
-       /* GetMembers is called last, so it will be the last to get the reply,
-        * so we'll be ready once that call return. */
        priv->self_handle = handle;
        tp_cli_channel_interface_group_connect_to_members_changed (priv->channel,
                                                                   tp_group_members_changed_cb,
                                                                   NULL, NULL,
                                                                   group, NULL);
+
+       /* GetMembers is called last, so it will be the last to get the reply,
+        * so we'll be ready once that call return. */
+       g_object_get (priv->channel,
+                     "connection", &connection,
+                     "handle-type", &channel_handle_type,
+                     "handle", &channel_handle,
+                     NULL);
+       handles = g_array_sized_new (FALSE, FALSE, sizeof (guint), 1);
+       g_array_prepend_val (handles, channel_handle);
+       tp_cli_connection_call_inspect_handles (connection, -1,
+                                               channel_handle_type,
+                                               handles,
+                                               tp_group_inspect_handles_cb,
+                                               NULL, NULL,
+                                               group);
+       g_array_free (handles, TRUE);
+
        tp_cli_channel_interface_group_call_get_local_pending_members_with_info
                                                        (priv->channel, -1,
                                                         tp_group_get_local_pending_cb,
@@ -546,10 +584,8 @@ tp_group_finalize (GObject *object)
 static void
 tp_group_constructed (GObject *group)
 {
-       EmpathyTpGroupPriv      *priv = GET_PRIV (group);
-       gboolean                 channel_ready;
-
-       G_OBJECT_CLASS (empathy_tp_group_parent_class)->constructed (group);
+       EmpathyTpGroupPriv *priv = GET_PRIV (group);
+       gboolean            channel_ready;
 
        priv->factory = empathy_contact_factory_new ();
 
@@ -908,16 +944,10 @@ empathy_tp_group_get_remote_pendings (EmpathyTpGroup *group)
 const gchar *
 empathy_tp_group_get_name (EmpathyTpGroup *group)
 {
-       EmpathyTpGroupPriv *priv;
+       EmpathyTpGroupPriv *priv = GET_PRIV (group);
 
        g_return_val_if_fail (EMPATHY_IS_TP_GROUP (group), NULL);
-
-       priv = GET_PRIV (group);
-
-       /* Lazy initialisation */
-       if (!priv->group_name && priv->tp_chan->handle != 0) {
-               priv->group_name = empathy_inspect_channel (priv->account, priv->tp_chan);
-       }
+       g_return_val_if_fail (priv->ready, NULL);
 
        return priv->group_name;
 }
@@ -969,3 +999,14 @@ empathy_tp_group_is_member (EmpathyTpGroup *group,
        return g_list_find (priv->members, contact) != NULL;
 }
 
+gboolean
+empathy_tp_group_is_ready (EmpathyTpGroup *group)
+{
+       EmpathyTpGroupPriv *priv = GET_PRIV (group);
+
+       g_return_val_if_fail (EMPATHY_IS_TP_GROUP (group), FALSE);
+
+       return priv->ready;
+}
+
+
index b8eb2e1c04f4609ae886f74200edb276c1664162..93ffd5281f588aabb64903f6c2f7b1e2693870a5 100644 (file)
@@ -83,6 +83,7 @@ const gchar *       empathy_tp_group_get_object_path     (EmpathyTpGroup     *gr
 TpChan *            empathy_tp_group_get_channel         (EmpathyTpGroup     *group);
 gboolean            empathy_tp_group_is_member           (EmpathyTpGroup     *group,
                                                          EmpathyContact     *contact);
+gboolean            empathy_tp_group_is_ready            (EmpathyTpGroup     *group);
 EmpathyPendingInfo *empathy_pending_info_new             (EmpathyContact     *member,
                                                          EmpathyContact     *actor,
                                                          const gchar        *message);