diff options
author | Sjoerd Simons <sjoerd.simons@collabora.co.uk> | 2011-02-23 19:14:06 +0800 |
---|---|---|
committer | Sjoerd Simons <sjoerd.simons@collabora.co.uk> | 2011-02-23 22:50:44 +0800 |
commit | 87c608d6bb63b59625331e764333ca49d464559a (patch) | |
tree | c102670f3dd5407476e5cd2eaa645541ffb4dd13 /src/empathy-call-factory.c | |
parent | 2f18a9a0364fa63dc21ec68fda25406303f58483 (diff) | |
download | gsoc2013-empathy-87c608d6bb63b59625331e764333ca49d464559a.tar gsoc2013-empathy-87c608d6bb63b59625331e764333ca49d464559a.tar.gz gsoc2013-empathy-87c608d6bb63b59625331e764333ca49d464559a.tar.bz2 gsoc2013-empathy-87c608d6bb63b59625331e764333ca49d464559a.tar.lz gsoc2013-empathy-87c608d6bb63b59625331e764333ca49d464559a.tar.xz gsoc2013-empathy-87c608d6bb63b59625331e764333ca49d464559a.tar.zst gsoc2013-empathy-87c608d6bb63b59625331e764333ca49d464559a.zip |
Add TargetContact property that's guaranteed to exist on CallHandler
Diffstat (limited to 'src/empathy-call-factory.c')
-rw-r--r-- | src/empathy-call-factory.c | 34 |
1 files changed, 28 insertions, 6 deletions
diff --git a/src/empathy-call-factory.c b/src/empathy-call-factory.c index 73631ca5e..87839d009 100644 --- a/src/empathy-call-factory.c +++ b/src/empathy-call-factory.c @@ -31,6 +31,7 @@ #include <libempathy/empathy-dispatcher.h> #include <libempathy/empathy-channel-factory.h> +#include <libempathy/empathy-tp-contact-factory.h> #include <libempathy/empathy-utils.h> #include "empathy-call-factory.h" @@ -253,21 +254,35 @@ empathy_call_factory_new_call_with_streams (EmpathyContact *contact, } static void -create_call_handler (EmpathyCallFactory *factory, - TpyCallChannel *call) +call_channel_got_contact (TpConnection *connection, + EmpathyContact *contact, + const GError *error, + gpointer user_data, + GObject *weak_object) { + EmpathyCallFactory *factory = EMPATHY_CALL_FACTORY (weak_object); EmpathyCallHandler *handler; + TpyCallChannel *call = TPY_CALL_CHANNEL (user_data); - g_return_if_fail (factory != NULL); + if (contact == NULL) + { + /* FIXME use hangup with an appropriate error */ + tp_channel_close_async (TP_CHANNEL (call), NULL, NULL); + goto out; + } - handler = empathy_call_handler_new_for_channel (call); + handler = empathy_call_handler_new_for_channel (call, contact); g_signal_emit (factory, signals[NEW_CALL_HANDLER], 0, handler, FALSE); g_object_unref (handler); + +out: + g_object_unref (call); } + static void handle_channels_cb (TpSimpleHandler *handler, TpAccount *account, @@ -285,6 +300,7 @@ handle_channels_cb (TpSimpleHandler *handler, { TpChannel *channel = l->data; TpyCallChannel *call; + const gchar *id; if (tp_proxy_get_invalidated (channel) != NULL) continue; @@ -297,8 +313,14 @@ handle_channels_cb (TpSimpleHandler *handler, continue; call = TPY_CALL_CHANNEL (channel); - create_call_handler (self, call); - g_object_unref (call); + + id = tp_channel_get_identifier (channel); + empathy_tp_contact_factory_get_from_id (connection, + id, + call_channel_got_contact, + g_object_ref (channel), + g_object_unref, + (GObject *) self); } tp_handle_channels_context_accept (context); |