[empathy] Prioritize default individual for chats using capabilities (#629912)
- From: Guillaume Desmottes <gdesmott src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [empathy] Prioritize default individual for chats using capabilities (#629912)
- Date: Mon, 27 Sep 2010 13:20:47 +0000 (UTC)
commit a2851c345723360e779b9adc4fe17684136f40b7
Author: Guillaume Desmottes <guillaume desmottes collabora co uk>
Date: Fri Sep 17 14:10:32 2010 +0200
Prioritize default individual for chats using capabilities (#629912)
libempathy/empathy-contact.c | 62 ++++++++++++++++++++++++++++++++++++++++++
1 files changed, 62 insertions(+), 0 deletions(-)
---
diff --git a/libempathy/empathy-contact.c b/libempathy/empathy-contact.c
index ab3fba5..642f087 100644
--- a/libempathy/empathy-contact.c
+++ b/libempathy/empathy-contact.c
@@ -1770,6 +1770,40 @@ voip_cmp_func (EmpathyContact *a,
return 0;
}
+static gint
+ft_cmp_func (EmpathyContact *a,
+ EmpathyContact *b)
+{
+ gboolean can_send_files_a, can_send_files_b;
+
+ can_send_files_a = empathy_contact_can_send_files (a);
+ can_send_files_b = empathy_contact_can_send_files (b);
+
+ if (can_send_files_a == can_send_files_b)
+ return 0;
+ else if (can_send_files_a)
+ return -1;
+ else
+ return 1;
+}
+
+static gint
+rfb_stream_tube_cmp_func (EmpathyContact *a,
+ EmpathyContact *b)
+{
+ gboolean rfb_a, rfb_b;
+
+ rfb_a = empathy_contact_can_use_rfb_stream_tube (a);
+ rfb_b = empathy_contact_can_use_rfb_stream_tube (b);
+
+ if (rfb_a == rfb_b)
+ return 0;
+ else if (rfb_a)
+ return -1;
+ else
+ return 1;
+}
+
/* Sort by presence as with presence_cmp_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. */
@@ -1784,6 +1818,33 @@ voip_sort_func (EmpathyContact *a, EmpathyContact *b)
return voip_cmp_func (a, b);
}
+/* Sort by presence as with presence_cmp_func() and then break ties using the
+ * most "capable" individual. So users will be able to pick more actions on
+ * the contact in the "Contact" menu of the chat window. */
+static gint
+chat_sort_func (EmpathyContact *a,
+ EmpathyContact *b)
+{
+ gint result;
+
+ result = presence_cmp_func (a, b);
+ if (result != 0)
+ return result;
+
+ /* Prefer individual supporting file transfer */
+ result = ft_cmp_func (a, b);
+ if (result != 0)
+ return result;
+
+ /* Check audio/video capabilities */
+ result = voip_cmp_func (a, b);
+ if (result != 0)
+ return result;
+
+ /* Check 'Share my destop' feature */
+ return rfb_stream_tube_cmp_func (a, b);
+}
+
static GCompareFunc
get_sort_func_for_action (EmpathyActionType action_type)
{
@@ -1793,6 +1854,7 @@ get_sort_func_for_action (EmpathyActionType action_type)
case EMPATHY_ACTION_VIDEO_CALL:
return (GCompareFunc) voip_sort_func;
case EMPATHY_ACTION_CHAT:
+ return (GCompareFunc) chat_sort_func;
case EMPATHY_ACTION_VIEW_LOGS:
case EMPATHY_ACTION_SEND_FILE:
case EMPATHY_ACTION_SHARE_MY_DESKTOP:
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]