diff options
Diffstat (limited to 'alot/ui.py')
-rw-r--r-- | alot/ui.py | 14 |
1 files changed, 14 insertions, 0 deletions
@@ -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. |