From 415b48c96ad03fa4949268d0ce9645f02005a818 Mon Sep 17 00:00:00 2001 From: Philip Withnall Date: Thu, 2 Sep 2010 16:02:01 +0100 Subject: [PATCH] Add a heuristic to prefer audio- and video-capable Personas when calling When choosing which Persona out of an Individual to start an audio or video call to, given a choice between two Personas of equal presence, choose the one which is capable of both audio and video calls over the one which is capable of only one of the two. This is because clients which can do both types of call are generally more featureful than those which can only do one type. Helps: bgo#628338 --- libempathy/empathy-contact.c | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/libempathy/empathy-contact.c b/libempathy/empathy-contact.c index 0bba8839..ec5d83ab 100644 --- a/libempathy/empathy-contact.c +++ b/libempathy/empathy-contact.c @@ -1750,14 +1750,40 @@ presence_sort_func (EmpathyContact *a, EmpathyContact *b) folks_presence_get_presence_type (presence_b)); } +/* Sort by presence as with presence_sort_func(), but if the two contacts have + * the same presence, prefer the one which can do both audio *and* video calls, + * over the one which can only do one of the two. */ +static int +voip_sort_func (EmpathyContact *a, EmpathyContact *b) +{ + gboolean has_audio_video_a, has_audio_video_b; + gint presence_sort = presence_sort_func (a, b); + + if (presence_sort != 0) + return presence_sort; + + has_audio_video_a = empathy_contact_can_voip_audio (a) && + empathy_contact_can_voip_video (a); + has_audio_video_b = empathy_contact_can_voip_audio (b) && + empathy_contact_can_voip_video (b); + + if (has_audio_video_a && !has_audio_video_b) + return -1; + else if (!has_audio_video_a && has_audio_video_b) + return 1; + else + return 0; +} + static GCompareFunc get_sort_func_for_action (EmpathyActionType action_type) { switch (action_type) { - case EMPATHY_ACTION_CHAT: case EMPATHY_ACTION_AUDIO_CALL: case EMPATHY_ACTION_VIDEO_CALL: + return (GCompareFunc) voip_sort_func; + case EMPATHY_ACTION_CHAT: case EMPATHY_ACTION_VIEW_LOGS: case EMPATHY_ACTION_SEND_FILE: case EMPATHY_ACTION_SHARE_MY_DESKTOP: -- 2.39.2