aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>2012-03-02 17:50:09 +0800
committerGuillaume Desmottes <guillaume.desmottes@collabora.co.uk>2012-03-02 17:50:09 +0800
commit9c5568e53b09615bee4d516fd8ea29341383fbf7 (patch)
treec72f1f7b9d4fb6985975a4410be805031190fa6f
parent634c2e8376910b96e584159da43a9e708d3a9573 (diff)
downloadgsoc2013-empathy-9c5568e53b09615bee4d516fd8ea29341383fbf7.tar
gsoc2013-empathy-9c5568e53b09615bee4d516fd8ea29341383fbf7.tar.gz
gsoc2013-empathy-9c5568e53b09615bee4d516fd8ea29341383fbf7.tar.bz2
gsoc2013-empathy-9c5568e53b09615bee4d516fd8ea29341383fbf7.tar.lz
gsoc2013-empathy-9c5568e53b09615bee4d516fd8ea29341383fbf7.tar.xz
gsoc2013-empathy-9c5568e53b09615bee4d516fd8ea29341383fbf7.tar.zst
gsoc2013-empathy-9c5568e53b09615bee4d516fd8ea29341383fbf7.zip
Revert "Stop approve StreamedMedia channels"
This reverts commit c7dd14aef20e429135fba7c7a53a8d507b9579a3.
-rw-r--r--src/empathy-event-manager.c86
-rw-r--r--src/empathy-event-manager.h1
-rw-r--r--src/empathy-notifications-approver.c9
3 files changed, 94 insertions, 2 deletions
diff --git a/src/empathy-event-manager.c b/src/empathy-event-manager.c
index 75f2cb8ab..c6b3e29ed 100644
--- a/src/empathy-event-manager.c
+++ b/src/empathy-event-manager.c
@@ -33,6 +33,7 @@
#include <libempathy/empathy-tp-contact-factory.h>
#include <libempathy/empathy-connection-aggregator.h>
#include <libempathy/empathy-tp-chat.h>
+#include <libempathy/empathy-tp-streamed-media.h>
#include <libempathy/empathy-utils.h>
#include <libempathy/empathy-gsettings.h>
@@ -407,7 +408,11 @@ reject_channel_claim_cb (GObject *source,
goto out;
}
- if (TP_IS_CALL_CHANNEL (user_data))
+ if (EMPATHY_IS_TP_STREAMED_MEDIA (user_data))
+ {
+ empathy_tp_streamed_media_close (user_data);
+ }
+ else if (TP_IS_CALL_CHANNEL (user_data))
{
tp_call_channel_hangup_async (user_data,
TP_CALL_STATE_CHANGE_REASON_USER_REQUESTED,
@@ -494,7 +499,13 @@ event_channel_process_voip_func (EventPriv *event)
return;
}
- if (etype == EMPATHY_EVENT_TYPE_CALL)
+ if (etype == EMPATHY_EVENT_TYPE_VOIP)
+ {
+ EmpathyTpStreamedMedia *call;
+ call = EMPATHY_TP_STREAMED_MEDIA (event->approval->handler_instance);
+ video = empathy_tp_streamed_media_has_initial_video (call);
+ }
+ else if (etype == EMPATHY_EVENT_TYPE_CALL)
{
TpCallChannel *call;
call = TP_CALL_CHANNEL (event->approval->handler_instance);
@@ -737,6 +748,54 @@ event_manager_call_channel_got_contact_cb (TpConnection *connection,
}
static void
+event_manager_media_channel_got_contact (EventManagerApproval *approval)
+{
+ EmpathyEventManagerPriv *priv = GET_PRIV (approval->manager);
+ GtkWidget *window = empathy_roster_window_dup ();
+ gchar *header;
+ EmpathyTpStreamedMedia *call;
+ gboolean video;
+
+ call = EMPATHY_TP_STREAMED_MEDIA (approval->handler_instance);
+
+ video = empathy_tp_streamed_media_has_initial_video (call);
+
+ header = g_strdup_printf (
+ video ? _("Incoming video call from %s") :_("Incoming call from %s"),
+ empathy_contact_get_alias (approval->contact));
+
+ event_manager_add (approval->manager, NULL,
+ approval->contact, EMPATHY_EVENT_TYPE_VOIP,
+ video ? EMPATHY_IMAGE_VIDEO_CALL : EMPATHY_IMAGE_VOIP,
+ header, NULL, approval,
+ event_channel_process_voip_func, NULL);
+
+ g_free (header);
+
+ priv->ringing++;
+ if (priv->ringing == 1)
+ empathy_sound_manager_start_playing (priv->sound_mgr, window,
+ EMPATHY_SOUND_PHONE_INCOMING, MS_BETWEEN_RING);
+
+ g_object_unref (window);
+}
+
+static void
+event_manager_media_channel_contact_changed_cb (EmpathyTpStreamedMedia *call,
+ GParamSpec *param, EventManagerApproval *approval)
+{
+ EmpathyContact *contact;
+
+ g_object_get (G_OBJECT (call), "contact", &contact, NULL);
+
+ if (contact == NULL)
+ return;
+
+ approval->contact = contact;
+ event_manager_media_channel_got_contact (approval);
+}
+
+static void
invite_dialog_response_cb (GtkDialog *dialog,
gint response,
EventManagerApproval *approval)
@@ -1021,6 +1080,29 @@ approve_channels (TpSimpleApprover *approver,
event_manager_chat_message_received_cb (tp_chat, msg, approval);
}
}
+ else if (channel_type == TP_IFACE_QUARK_CHANNEL_TYPE_STREAMED_MEDIA)
+ {
+ EmpathyContact *contact;
+ EmpathyTpStreamedMedia *call = empathy_tp_streamed_media_new (account,
+ channel);
+
+ approval->handler_instance = G_OBJECT (call);
+
+ g_object_get (G_OBJECT (call), "contact", &contact, NULL);
+
+ if (contact == NULL)
+ {
+ g_signal_connect (call, "notify::contact",
+ G_CALLBACK (event_manager_media_channel_contact_changed_cb),
+ approval);
+ }
+ else
+ {
+ approval->contact = contact;
+ event_manager_media_channel_got_contact (approval);
+ }
+
+ }
else if (channel_type == TP_IFACE_QUARK_CHANNEL_TYPE_CALL)
{
TpCallChannel *call = TP_CALL_CHANNEL (channel);
diff --git a/src/empathy-event-manager.h b/src/empathy-event-manager.h
index c780e5e73..91c6e1f99 100644
--- a/src/empathy-event-manager.h
+++ b/src/empathy-event-manager.h
@@ -50,6 +50,7 @@ struct _EmpathyEventManagerClass {
typedef enum {
EMPATHY_EVENT_TYPE_CHAT,
+ EMPATHY_EVENT_TYPE_VOIP,
EMPATHY_EVENT_TYPE_CALL,
EMPATHY_EVENT_TYPE_TRANSFER,
EMPATHY_EVENT_TYPE_SUBSCRIPTION,
diff --git a/src/empathy-notifications-approver.c b/src/empathy-notifications-approver.c
index bb7f6b458..7a4f03731 100644
--- a/src/empathy-notifications-approver.c
+++ b/src/empathy-notifications-approver.c
@@ -25,6 +25,8 @@
#include <libnotify/notify.h>
#include <telepathy-glib/telepathy-glib.h>
+#include <libempathy/empathy-tp-streamed-media.h>
+
#include <libempathy-gtk/empathy-notify-manager.h>
#include <libempathy-gtk/empathy-call-utils.h>
@@ -188,7 +190,12 @@ add_notification_actions (EmpathyNotificationsApprover *self,
self, NULL);
break;
+ case EMPATHY_EVENT_TYPE_VOIP:
case EMPATHY_EVENT_TYPE_CALL:
+ if (self->priv->event->type == EMPATHY_EVENT_TYPE_VOIP)
+ video = empathy_tp_streamed_media_has_initial_video (
+ EMPATHY_TP_STREAMED_MEDIA (self->priv->event->handler_instance));
+ else
video = tp_call_channel_has_initial_video (
TP_CALL_CHANNEL (self->priv->event->handler_instance), NULL);
@@ -253,6 +260,7 @@ notification_is_urgent (EmpathyNotificationsApprover *self,
* interact ASAP */
switch (self->priv->event->type) {
case EMPATHY_EVENT_TYPE_CHAT:
+ case EMPATHY_EVENT_TYPE_VOIP:
case EMPATHY_EVENT_TYPE_CALL:
case EMPATHY_EVENT_TYPE_TRANSFER:
case EMPATHY_EVENT_TYPE_INVITATION:
@@ -280,6 +288,7 @@ get_category_for_event_type (EmpathyEventType type)
return "presence.online";
case EMPATHY_EVENT_TYPE_PRESENCE_OFFLINE:
return "presence.offline";
+ case EMPATHY_EVENT_TYPE_VOIP:
case EMPATHY_EVENT_TYPE_CALL:
return "x-empathy.call.incoming";
case EMPATHY_EVENT_TYPE_TRANSFER: