diff options
author | Guillaume Desmottes <guillaume.desmottes@collabora.co.uk> | 2011-08-05 19:13:31 +0800 |
---|---|---|
committer | Guillaume Desmottes <guillaume.desmottes@collabora.co.uk> | 2011-10-18 16:56:40 +0800 |
commit | 588247c8bba25fd9ed087e1f8f06997c5c7534f2 (patch) | |
tree | 509fc189e576f84392566af0b69cca18ac6c5271 /libempathy/empathy-utils.c | |
parent | 5af3f211b66a1278c44ad6815224e00dd26b795a (diff) | |
download | gsoc2013-empathy-588247c8bba25fd9ed087e1f8f06997c5c7534f2.tar gsoc2013-empathy-588247c8bba25fd9ed087e1f8f06997c5c7534f2.tar.gz gsoc2013-empathy-588247c8bba25fd9ed087e1f8f06997c5c7534f2.tar.bz2 gsoc2013-empathy-588247c8bba25fd9ed087e1f8f06997c5c7534f2.tar.lz gsoc2013-empathy-588247c8bba25fd9ed087e1f8f06997c5c7534f2.tar.xz gsoc2013-empathy-588247c8bba25fd9ed087e1f8f06997c5c7534f2.tar.zst gsoc2013-empathy-588247c8bba25fd9ed087e1f8f06997c5c7534f2.zip |
factor out empathy_individual_can_audio_video_call()
Also allow caller to get a ref on the EmpathyContact supporting audio/video.
https://bugzilla.gnome.org/show_bug.cgi?id=661981
Diffstat (limited to 'libempathy/empathy-utils.c')
-rw-r--r-- | libempathy/empathy-utils.c | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/libempathy/empathy-utils.c b/libempathy/empathy-utils.c index 9eec82e74..c4c2780ac 100644 --- a/libempathy/empathy-utils.c +++ b/libempathy/empathy-utils.c @@ -1090,3 +1090,61 @@ out: g_clear_object (&persona_store); return retval; } + +/* Calculate whether the Individual can do audio or video calls. + * FIXME: We can remove this once libfolks has grown capabilities support + * again: bgo#626179. */ +void +empathy_individual_can_audio_video_call (FolksIndividual *individual, + gboolean *can_audio_call, + gboolean *can_video_call, + EmpathyContact **out_contact) +{ + GeeSet *personas; + GeeIterator *iter; + gboolean can_audio = FALSE, can_video = FALSE; + + personas = folks_individual_get_personas (individual); + iter = gee_iterable_iterator (GEE_ITERABLE (personas)); + while (gee_iterator_next (iter)) + { + FolksPersona *persona = gee_iterator_get (iter); + TpContact *tp_contact; + + if (!empathy_folks_persona_is_interesting (persona)) + goto while_finish; + + tp_contact = tpf_persona_get_contact (TPF_PERSONA (persona)); + if (tp_contact != NULL) + { + EmpathyContact *contact; + + contact = empathy_contact_dup_from_tp_contact (tp_contact); + empathy_contact_set_persona (contact, persona); + + can_audio = can_audio || empathy_contact_get_capabilities (contact) & + EMPATHY_CAPABILITIES_AUDIO; + can_video = can_video || empathy_contact_get_capabilities (contact) & + EMPATHY_CAPABILITIES_VIDEO; + + if (out_contact != NULL) + *out_contact = g_object_ref (contact); + + g_object_unref (contact); + } + +while_finish: + g_clear_object (&persona); + + if (can_audio && can_video) + break; + } + + g_clear_object (&iter); + + if (can_audio_call != NULL) + *can_audio_call = can_audio; + + if (can_video_call != NULL) + *can_video_call = can_video; +} |