empathy_call_with_contact (EmpathyContact *contact)
{
#ifdef HAVE_VOIP
- MissionControl *mc;
- McAccount *account;
- TpConn *tp_conn;
- gchar *object_path;
- const gchar *bus_name;
- TpChan *new_chan;
- EmpathyTpGroup *group;
- GError *error = NULL;
+ MissionControl *mc;
+ McAccount *account;
+ TpConn *tp_conn;
+ gchar *object_path;
+ const gchar *bus_name;
+ TpChan *new_chan;
+ EmpathyContactFactory *factory;
+ EmpathyTpGroup *group;
+ EmpathyContact *self_contact;
+ GError *error = NULL;
g_return_if_fail (EMPATHY_IS_CONTACT (contact));
0);
group = empathy_tp_group_new (account, new_chan);
+ factory = empathy_contact_factory_new ();
+ self_contact = empathy_contact_factory_get_user (factory, account);
empathy_tp_group_add_member (group, contact, "");
+ empathy_tp_group_add_member (group, self_contact, "");
+ g_object_unref (factory);
+ g_object_unref (self_contact);
g_object_unref (group);
g_object_unref (mc);
g_object_unref (tp_conn);
#endif
}
+#ifdef HAVE_VOIP
+struct empathy_call_cb_user_data {
+ guint handler;
+ GObject *factory;
+};
+
+static void
+empathy_call_with_contact_id_got_handle_cb (EmpathyContact *contact,
+ GParamSpec *property, gpointer user_data) {
+
+ struct empathy_call_cb_user_data *ud =
+ (struct empathy_call_cb_user_data *) user_data;
+
+ g_signal_handler_disconnect (contact, ud->handler);
+
+ empathy_call_with_contact (contact);
+ g_object_unref (ud->factory);
+ g_object_unref (contact);
+ g_free (ud);
+}
+#endif
+
void
empathy_call_with_contact_id (McAccount *account, const gchar *contact_id)
{
factory = empathy_contact_factory_new ();
contact = empathy_contact_factory_get_from_id (factory, account, contact_id);
- empathy_call_with_contact (contact);
- g_object_unref (contact);
- g_object_unref (factory);
+
+ if (empathy_contact_get_handle (contact) != 0) {
+ empathy_call_with_contact (contact);
+ g_object_unref (contact);
+ g_object_unref (factory);
+ } else {
+ struct empathy_call_cb_user_data *ud;
+ ud = g_malloc0 (sizeof (struct empathy_call_cb_user_data));
+ ud->factory = G_OBJECT (factory);
+ ud->handler = g_signal_connect (G_OBJECT (contact), "notify::handle",
+ G_CALLBACK (empathy_call_with_contact_id_got_handle_cb), ud);
+ }
+
#endif
}