aboutsummaryrefslogtreecommitdiffstats
path: root/libempathy/empathy-utils.c
diff options
context:
space:
mode:
Diffstat (limited to 'libempathy/empathy-utils.c')
-rw-r--r--libempathy/empathy-utils.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/libempathy/empathy-utils.c b/libempathy/empathy-utils.c
index 87e593a85..754526608 100644
--- a/libempathy/empathy-utils.c
+++ b/libempathy/empathy-utils.c
@@ -39,6 +39,9 @@
#include "empathy-utils.h"
#include "empathy-contact-factory.h"
#include "empathy-contact-manager.h"
+#include "empathy-dispatcher.h"
+#include "empathy-dispatch-operation.h"
+#include "empathy-tp-call.h"
#include <extensions/extensions.h>
@@ -448,3 +451,36 @@ empathy_proxy_equal (gconstpointer a,
return g_str_equal (proxy_a->object_path, proxy_b->object_path) &&
g_str_equal (proxy_a->bus_name, proxy_b->bus_name);
}
+
+static void
+empathy_call_request_cb (EmpathyDispatchOperation *operation,
+ const GError *error, gpointer user_data)
+{
+ EmpathyContact *contact = EMPATHY_CONTACT (user_data);
+
+ if (error != NULL)
+ {
+ DEBUG ("Failed to request streamed media channel %s",
+ error->message);
+ }
+ else
+ {
+ EmpathyTpCall *call =
+ EMPATHY_TP_CALL (
+ empathy_dispatch_operation_get_channel_wrapper (operation));
+
+ empathy_tp_call_to (call, contact);
+
+ g_object_unref (call);
+ }
+
+ g_object_unref (contact);
+}
+
+void
+empathy_start_call_with_contact (EmpathyContact *contact)
+{
+ g_object_ref (contact);
+ empathy_dispatcher_call_with_contact (contact, empathy_call_request_cb,
+ contact);
+}