summaryrefslogtreecommitdiff
path: root/alot/ui.py
diff options
context:
space:
mode:
Diffstat (limited to 'alot/ui.py')
-rw-r--r--alot/ui.py14
1 files changed, 14 insertions, 0 deletions
diff --git a/alot/ui.py b/alot/ui.py
index 9a2d59fd..69c9cda3 100644
--- a/alot/ui.py
+++ b/alot/ui.py
@@ -104,6 +104,8 @@ class UI:
# running asyncio event loop
_loop = None
+ _pending_tasks = None
+
def __init__(self, loop, dbman, initialcmdline):
"""
:param dbman: :class:`~alot.db.DBManager`
@@ -133,6 +135,8 @@ class UI:
self._loop = loop
+ self._pending_tasks = set()
+
# define empty notification pile
self._notification_bar = urwid.Pile([])
self._footer_wgt = urwid.Pile([self._notification_bar])
@@ -758,8 +762,18 @@ class UI:
self._save_history_to_file(self.recipienthistory,
self._recipients_hist_file, size=size)
+ logging.info('cancelling pending tasks: %s', self._pending_tasks)
+ for t in self._pending_tasks:
+ t.cancel()
+ await asyncio.gather(*self._pending_tasks)
+
await self.dbman.shutdown()
+ def run_task(self, coro):
+ task = self._loop.create_task(coro)
+ self._pending_tasks.add(task)
+ task.add_done_callback(self._pending_tasks.discard)
+
@staticmethod
def _load_history_from_file(path, size=-1):
"""Load a history list from a file and split it into lines.