Handle sqlite errors during :history-clear

This commit is contained in:
Florian Bruhin 2017-11-28 07:02:33 +01:00
parent 73587b1e16
commit ef1825efb0

View File

@ -21,6 +21,7 @@
import os import os
import time import time
import contextlib
from PyQt5.QtCore import pyqtSlot, QUrl, QTimer from PyQt5.QtCore import pyqtSlot, QUrl, QTimer
@ -87,6 +88,16 @@ class WebHistory(sql.SqlTable):
def __contains__(self, url): def __contains__(self, url):
return self._contains_query.run(val=url).value() 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): def _rebuild_completion(self):
data = {'url': [], 'title': [], 'last_atime': []} data = {'url': [], 'title': [], 'last_atime': []}
# select the latest entry for each url # select the latest entry for each url
@ -142,8 +153,9 @@ class WebHistory(sql.SqlTable):
"history?") "history?")
def _do_clear(self): def _do_clear(self):
self.delete_all() with self._handle_sql_errors():
self.completion.delete_all() self.delete_all()
self.completion.delete_all()
def delete_url(self, url): def delete_url(self, url):
"""Remove all history entries with the given 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()) 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), self.insert({'url': self._format_url(url),
'title': title, 'title': title,
'atime': atime, 'atime': atime,
@ -202,11 +214,6 @@ class WebHistory(sql.SqlTable):
'title': title, 'title': title,
'last_atime': atime 'last_atime': atime
}, replace=True) }, 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): def _parse_entry(self, line):
"""Parse a history line like '12345 http://example.com title'.""" """Parse a history line like '12345 http://example.com title'."""