Skip to content

Commit 54e664d

Browse files
committed
enable concatenation of search queries (split by " / ")
1 parent 32b885d commit 54e664d

File tree

2 files changed

+29
-14
lines changed

2 files changed

+29
-14
lines changed

alot/buffers/search.py

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ def get_info(self):
4444
info['result_count_positive'] = 's' if self.result_count > 1 else ''
4545
return info
4646

47+
4748
def rebuild(self, reverse=False):
4849
self.isinitialized = True
4950
self.reversed = reverse
@@ -61,20 +62,26 @@ def rebuild(self, reverse=False):
6162
if exclude_tags:
6263
exclude_tags = [t for t in exclude_tags.split(';') if t]
6364

64-
try:
65-
self.result_count = self.dbman.count_messages(self.querystring)
66-
threads = self.dbman.get_threads(
67-
self.querystring, order, exclude_tags)
68-
except NotmuchError:
69-
self.ui.notify('malformed query string: %s' % self.querystring,
70-
'error')
71-
self.listbox = urwid.ListBox([])
72-
self.body = self.listbox
73-
return
74-
75-
self.threadlist = IterableWalker(threads, ThreadlineWidget,
76-
dbman=self.dbman,
77-
reverse=reverse)
65+
querylist = self.querystring.split(' / ')
66+
for query in querylist:
67+
try:
68+
self.result_count = self.dbman.count_messages(query)
69+
threads = self.dbman.get_threads(
70+
query, order, exclude_tags)
71+
except NotmuchError:
72+
self.ui.notify('malformed query string: %s' % query,
73+
'error')
74+
self.listbox = urwid.ListBox([])
75+
self.body = self.listbox
76+
return
77+
78+
iterablewalker = IterableWalker(threads, ThreadlineWidget,
79+
dbman=self.dbman,
80+
reverse=reverse)
81+
if self.threadlist:
82+
self.threadlist.append(iterablewalker)
83+
else:
84+
self.threadlist = iterablewalker
7885

7986
self.listbox = urwid.ListBox(self.threadlist)
8087
self.body = self.listbox

alot/walker.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,11 @@
66
import urwid
77

88

9+
def chain(*iterables):
10+
for iterable in iterables:
11+
yield from iterable
12+
13+
914
class IterableWalker(urwid.ListWalker):
1015

1116
"""An urwid walker for iterables.
@@ -92,3 +97,6 @@ def _get_next_item(self):
9297

9398
def get_lines(self):
9499
return self.lines
100+
101+
def append(self, iterableWalker):
102+
self.iterable = chain(self.iterable, iterableWalker.iterable)

0 commit comments

Comments
 (0)