empathy r637 - trunk/libempathy



Author: xclaesse
Date: Fri Feb 15 22:28:44 2008
New Revision: 637
URL: http://svn.gnome.org/viewvc/empathy?rev=637&view=rev

Log:
Merge commit 'sjoerd/master'


Modified:
   trunk/libempathy/empathy-contact.c
   trunk/libempathy/empathy-contact.h
   trunk/libempathy/empathy-tp-call.c
   trunk/libempathy/empathy-tp-contact-factory.c

Modified: trunk/libempathy/empathy-contact.c
==============================================================================
--- trunk/libempathy/empathy-contact.c	(original)
+++ trunk/libempathy/empathy-contact.c	Fri Feb 15 22:28:44 2008
@@ -176,6 +176,10 @@
 static void
 empathy_contact_init (EmpathyContact *contact)
 {
+	EmpathyContactPriv *priv;
+
+	priv = GET_PRIV (contact);
+	priv->capabilities = EMPATHY_CAPABILITIES_UNKNOWN;
 }
 
 static void

Modified: trunk/libempathy/empathy-contact.h
==============================================================================
--- trunk/libempathy/empathy-contact.h	(original)
+++ trunk/libempathy/empathy-contact.h	Fri Feb 15 22:28:44 2008
@@ -54,8 +54,10 @@
 };
 
 typedef enum {
+	EMPATHY_CAPABILITIES_NONE = 0,
 	EMPATHY_CAPABILITIES_AUDIO = 1 << 0,
 	EMPATHY_CAPABILITIES_VIDEO = 1 << 1,
+	EMPATHY_CAPABILITIES_UNKNOWN = 1 << 7
 } EmpathyCapabilities;
 
 GType               empathy_contact_get_type           (void) G_GNUC_CONST;

Modified: trunk/libempathy/empathy-tp-call.c
==============================================================================
--- trunk/libempathy/empathy-tp-call.c	(original)
+++ trunk/libempathy/empathy-tp-call.c	Fri Feb 15 22:28:44 2008
@@ -326,6 +326,20 @@
 }
 
 static void
+tp_call_request_streams_capabilities_cb (EmpathyContact *contact,
+  GParamSpec *property, gpointer user_data)
+{
+  EmpathyTpCall *call = EMPATHY_TP_CALL (user_data);
+
+  g_signal_handlers_disconnect_by_func (contact,
+        tp_call_request_streams_capabilities_cb,
+        user_data);
+
+  tp_call_request_streams_for_capabilities (call,
+     empathy_contact_get_capabilities (contact));
+}
+
+static void
 tp_call_request_streams (EmpathyTpCall *call)
 {
   EmpathyTpCallPriv *priv = GET_PRIV (call);
@@ -335,7 +349,6 @@
   empathy_debug (DEBUG_DOMAIN,
       "Requesting appropriate audio/video streams from contact");
 
-  capabilities = empathy_contact_get_capabilities (priv->contact);
 
   /* FIXME: SIP don't have capabilities interface but we know it supports
    *        only audio and not video. */
@@ -345,6 +358,15 @@
     {
       capabilities = EMPATHY_CAPABILITIES_AUDIO;
     }
+  else
+    {
+      capabilities = empathy_contact_get_capabilities (priv->contact);
+      if (capabilities == EMPATHY_CAPABILITIES_UNKNOWN) {
+        g_signal_connect (G_OBJECT (priv->contact), "notify::capabilities",
+          G_CALLBACK (tp_call_request_streams_capabilities_cb), call);
+        return;
+      }
+    }
 
   tp_call_request_streams_for_capabilities (call, capabilities);
 }

Modified: trunk/libempathy/empathy-tp-contact-factory.c
==============================================================================
--- trunk/libempathy/empathy-tp-contact-factory.c	(original)
+++ trunk/libempathy/empathy-tp-contact-factory.c	Fri Feb 15 22:28:44 2008
@@ -505,8 +505,7 @@
 	capabilities = empathy_contact_get_capabilities (contact);
 
 	if (strcmp (channel_type, TP_IFACE_CHANNEL_TYPE_STREAMED_MEDIA) == 0) {
-		capabilities &= ~EMPATHY_CAPABILITIES_AUDIO;
-		capabilities &= ~EMPATHY_CAPABILITIES_VIDEO;
+		capabilities = EMPATHY_CAPABILITIES_NONE;
 		if (specific & TP_CHANNEL_MEDIA_CAPABILITY_AUDIO) {
 			capabilities |= EMPATHY_CAPABILITIES_AUDIO;
 		}
@@ -534,7 +533,9 @@
 
 	if (error) {
 		empathy_debug (DEBUG_DOMAIN, "Error getting capabilities: %s",
-			       error->message);
+		       error->message);
+		/* FIXME Should set the capabilities of the contacts for which this request
+		 * originated to NONE */
 		goto OUT;
 	}
 



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