};
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;
g_array_free (stream_types, TRUE);
}
+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)
{
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. */
{
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);
}
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;
}
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;
}