From ef1825efb0f53dc7548ed38e1698cc4393a1681b Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Tue, 28 Nov 2017 07:02:33 +0100 Subject: [PATCH] Handle sqlite errors during :history-clear --- qutebrowser/browser/history.py | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/qutebrowser/browser/history.py b/qutebrowser/browser/history.py index de9e9bb4f..1901548bf 100644 --- a/qutebrowser/browser/history.py +++ b/qutebrowser/browser/history.py @@ -21,6 +21,7 @@ import os import time +import contextlib from PyQt5.QtCore import pyqtSlot, QUrl, QTimer @@ -87,6 +88,16 @@ class WebHistory(sql.SqlTable): def __contains__(self, url): return self._contains_query.run(val=url).value() + @contextlib.contextmanager + def _handle_sql_errors(self): + try: + yield + except sql.SqlError as e: + if e.environmental: + message.error("Failed to write history: {}".format(e.text())) + else: + raise + def _rebuild_completion(self): data = {'url': [], 'title': [], 'last_atime': []} # select the latest entry for each url @@ -142,8 +153,9 @@ class WebHistory(sql.SqlTable): "history?") def _do_clear(self): - self.delete_all() - self.completion.delete_all() + with self._handle_sql_errors(): + self.delete_all() + self.completion.delete_all() def delete_url(self, url): """Remove all history entries with the given url. @@ -191,7 +203,7 @@ class WebHistory(sql.SqlTable): atime = int(atime) if (atime is not None) else int(time.time()) - try: + with self._handle_sql_errors(): self.insert({'url': self._format_url(url), 'title': title, 'atime': atime, @@ -202,11 +214,6 @@ class WebHistory(sql.SqlTable): 'title': title, 'last_atime': atime }, replace=True) - except sql.SqlError as e: - if e.environmental: - message.error("Failed to write history: {}".format(e.text())) - else: - raise def _parse_entry(self, line): """Parse a history line like '12345 http://example.com title'."""