From b881e87496b9463e3ca9a48abdfe9a7e5df83230 Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Thu, 4 Feb 2021 14:44:34 +0100 Subject: buffers/namedqueries: add a hook for sorting queries --- alot/buffers/namedqueries.py | 20 ++++++++++++++------ docs/source/configuration/hooks.rst | 9 +++++++++ 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 -- cgit v1.2.3