summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data/default_config.cfg1
-rw-r--r--doc/en/configure.txt5
-rw-r--r--src/roster.py5
3 files changed, 9 insertions, 2 deletions
diff --git a/data/default_config.cfg b/data/default_config.cfg
index f75ae14b..76e02d57 100644
--- a/data/default_config.cfg
+++ b/data/default_config.cfg
@@ -231,6 +231,7 @@ roster_show_offline = false
# - show: sort by show (available/away/xa/…)
# - name: sort by roster name (if no name, then the bare jid is used)
# - resource: sort by resource number
+# - online: sort by online presence (online or not)
# You can arrange them however you like, and you have to separate them with
# underscores "_". Keep in mind that if there are more than 3 or 4 your sorting
# is most likely inefficient.
diff --git a/doc/en/configure.txt b/doc/en/configure.txt
index fc854dba..8331d2ea 100644
--- a/doc/en/configure.txt
+++ b/doc/en/configure.txt
@@ -289,8 +289,9 @@ section of this documentation.
* reverse: reverse the current sorting
* jid: sort by JID (alphabetical order)
* show: sort by show (available/away/xa/…)
- * name: Sort by roster name (if no name, then the bare jid is used)
- * resource: Sort by resource number
+ * name: sort by roster name (if no name, then the bare jid is used)
+ * resource: sort by resource number
+ * online: sort by online presence (online or not)
Those methods can be arranged however you like, and they have to be
separated by underscores ("_"). If there are more than 3 or 4 chained
diff --git a/src/roster.py b/src/roster.py
index c7717ea8..c5f89218 100644
--- a/src/roster.py
+++ b/src/roster.py
@@ -255,11 +255,16 @@ def sort_resource_nb(contact):
def sort_name(contact):
return contact.name.lower() or contact.bare_jid
+def sort_online(contact):
+ result = sort_show(contact)
+ return 0 if result < 5 else 1
+
SORTING_METHODS = {
'jid': sort_jid,
'show': sort_show,
'resource': sort_resource_nb,
'name': sort_name,
+ 'online': sort_online,
}
class RosterGroup(object):