[empathy: 58/99] Reject approval if call was hung up during approval



commit 7253d660e407204ad205feb331fe152f8fff7843
Author: Sjoerd Simons <sjoerd simons collabora co uk>
Date:   Mon Mar 14 13:23:19 2011 +0000

    Reject approval if call was hung up during approval
    
    If an incoming call gets ENDED during our approval stage either we or
    someone else closed it. In that case reject the approval (which will
    claim and close the channel). A future improvement could be to show a
    notification in case this happens

 src/empathy-event-manager.c |   29 +++++++++++++++++++++++++++--
 1 files changed, 27 insertions(+), 2 deletions(-)
---
diff --git a/src/empathy-event-manager.c b/src/empathy-event-manager.c
index 3c6fd79..6d58a4a 100644
--- a/src/empathy-event-manager.c
+++ b/src/empathy-event-manager.c
@@ -674,6 +674,21 @@ cdo_invalidated_cb (TpProxy *cdo,
 }
 
 static void
+event_manager_call_state_changed_cb (TpyCallChannel *call,
+  TpyCallState state,
+  TpyCallFlags flags,
+   const GValueArray *call_state_reason,
+  GHashTable *call_state_details,
+  EventManagerApproval *approval)
+{
+  if (state == TPY_CALL_STATE_ENDED)
+    {
+      DEBUG ("Call ended, seems we missed it :/");
+      reject_approval (approval);
+    }
+}
+
+static void
 event_manager_call_channel_got_contact_cb (TpConnection *connection,
                                  EmpathyContact *contact,
                                  const GError *error,
@@ -687,6 +702,8 @@ event_manager_call_channel_got_contact_cb (TpConnection *connection,
   gchar *header;
   gboolean video;
 
+  call = TPY_CALL_CHANNEL (approval->handler_instance);
+
   if (error != NULL)
     {
       DEBUG ("Can't get the contact for the call.. Rejecting?");
@@ -694,11 +711,19 @@ event_manager_call_channel_got_contact_cb (TpConnection *connection,
       return;
     }
 
+  if (tpy_call_channel_get_state (call, NULL, NULL) == TPY_CALL_STATE_ENDED)
+    {
+      DEBUG ("Call already ended, seems we missed it :/");
+      reject_approval (approval);
+      return;
+    }
+
+  approval->handler = g_signal_connect (call, "state-changed",
+    G_CALLBACK (event_manager_call_state_changed_cb), approval);
+
   window = empathy_main_window_dup ();
   approval->contact = g_object_ref (contact);
 
-  call = TPY_CALL_CHANNEL (approval->handler_instance);
-
   g_object_get (G_OBJECT (call), "initial-video", &video, NULL);
 
   header = g_strdup_printf (



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]