summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2021-02-04 14:44:34 +0100
committerAnton Khirnov <anton@khirnov.net>2021-02-04 14:44:34 +0100
commitb881e87496b9463e3ca9a48abdfe9a7e5df83230 (patch)
treee4c6526cb2929021a6979dfc5e3fcd8db39b7c22
parent4aec805399497c6082bd5328d95197a94ef32b9d (diff)
buffers/namedqueries: add a hook for sorting queries
-rw-r--r--alot/buffers/namedqueries.py20
-rw-r--r--docs/source/configuration/hooks.rst9
2 files changed, 23 insertions, 6 deletions
diff --git a/alot/buffers/namedqueries.py b/alot/buffers/namedqueries.py
index 80dcd13e..6a76e107 100644
--- a/alot/buffers/namedqueries.py
+++ b/alot/buffers/namedqueries.py
@@ -13,7 +13,8 @@ class NamedQueriesBuffer(Buffer):
modename = 'namedqueries'
- _dbman = None
+ _dbman = None
+ _queries = None
def __init__(self, dbman, filtfun):
self._dbman = dbman
@@ -26,7 +27,15 @@ class NamedQueriesBuffer(Buffer):
super().__init__()
def rebuild(self):
- self.queries = self._dbman.get_named_queries()
+ queries = self._dbman.get_named_queries()
+
+ sort_hook = settings.get_hook('namedqueries_sort')
+ if sort_hook:
+ queries = sort_hook(queries)
+ else:
+ queries = list(queries.items())
+
+ self._queries = queries
if self.isinitialized:
focusposition = self.querylist.get_focus()[1]
@@ -34,8 +43,7 @@ class NamedQueriesBuffer(Buffer):
focusposition = 0
lines = []
- for (num, key) in enumerate(self.queries):
- value = self.queries[key]
+ for num, (key, value) in enumerate(queries):
count = self._dbman.count_messages('query:"%s"' % key)
count_unread = self._dbman.count_messages('query:"%s" and '
'tag:unread' % key)
@@ -56,7 +64,7 @@ class NamedQueriesBuffer(Buffer):
self.querylist = urwid.ListBox(urwid.SimpleListWalker(lines))
self.body = self.querylist
- self.querylist.set_focus(focusposition % len(self.queries))
+ self.querylist.set_focus(focusposition % len(queries))
self.isinitialized = True
@@ -77,6 +85,6 @@ class NamedQueriesBuffer(Buffer):
async def get_info(self):
info = {}
- info['query_count'] = len(self.queries)
+ info['query_count'] = len(self._queries)
return info
diff --git a/docs/source/configuration/hooks.rst b/docs/source/configuration/hooks.rst
index be8972b3..1c7f4d9c 100644
--- a/docs/source/configuration/hooks.rst
+++ b/docs/source/configuration/hooks.rst
@@ -218,3 +218,12 @@ Apart from command pre- and posthooks, the following hooks will be interpreted:
:param ui: the main user interface
:type ui: :class:`alot.ui.UI`
+
+.. py:function:: namedqueries_sort(named_queries)
+
+ Sort (and possibly filter or otherwise process) named queries.
+
+ :param named_queries: Dict of 'query name' : 'query string'
+ :type named_queries: dict
+
+ :returns: sequence of ('query name', 'query string') pairs