From 332a5c2553db41de777473a1e1be9cd1522c9496 Mon Sep 17 00:00:00 2001 From: Emmanuel Gil Peyrot Date: Thu, 31 Mar 2016 18:54:41 +0100 Subject: Move the src directory to poezio, for better cython compatibility. --- poezio/roster_sorting.py | 90 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 poezio/roster_sorting.py (limited to 'poezio/roster_sorting.py') diff --git a/poezio/roster_sorting.py b/poezio/roster_sorting.py new file mode 100644 index 00000000..c57f0dce --- /dev/null +++ b/poezio/roster_sorting.py @@ -0,0 +1,90 @@ +""" +Defines the roster sorting methods used in roster.py +(for contacts/groups) +""" + +########################### Contacts sorting ############################ + +PRESENCE_PRIORITY = {'unavailable': 5, + 'xa': 4, + 'away': 3, + 'dnd': 2, + '': 1, + 'available': 1} + +def sort_jid(contact): + """Sort by contact JID""" + return contact.bare_jid + +def sort_show(contact): + """Sort by show (from high availability to low)""" + res = contact.get_highest_priority_resource() + if not res: + return 5 + show = res.presence + if show not in PRESENCE_PRIORITY: + return 0 + return PRESENCE_PRIORITY[show] + +def sort_resource_nb(contact): + """Sort by number of connected resources""" + return - len(contact) + +def sort_name(contact): + """Sort by name (case insensitive)""" + return contact.name.lower() or contact.bare_jid + +def sort_sname(contact): + """Sort by name (case sensitive)""" + return contact.name or contact.bare_jid + +def sort_online(contact): + """Sort by connected/disconnected""" + result = sort_show(contact) + return 0 if result < 5 else 1 + +SORTING_METHODS = { + 'jid': sort_jid, + 'sname': sort_sname, + 'show': sort_show, + 'resource': sort_resource_nb, + 'name': sort_name, + 'online': sort_online, +} + + +######################## Roster Groups sorting ########################## + +def sort_group_name(group): + """Sort by name (case insensitive)""" + return group.name.lower() + +def sort_group_sname(group): + """Sort by name (case-sensitive)""" + return group.name + +def sort_group_folded(group): + """Sort by folded/unfolded""" + return group.folded + +def sort_group_connected(group): + """Sort by number of connected contacts""" + return - group.get_nb_connected_contacts() + +def sort_group_size(group): + """Sort by group size""" + return - len(group) + +def sort_group_none(group): + """Put the none group at the end, if any""" + return 0 if group.name != 'none' else 1 + +GROUP_SORTING_METHODS = { + 'name': sort_group_name, + 'fold': sort_group_folded, + 'connected': sort_group_connected, + 'size': sort_group_size, + 'none': sort_group_none, + 'sname': sort_group_sname, +} + -- cgit v1.2.3