Add error handling for autosave session

This commit is contained in:
Florian Bruhin 2017-02-20 06:44:23 +01:00
parent cafff3e1b6
commit ee25e900f8
3 changed files with 12 additions and 5 deletions

View File

@ -723,7 +723,11 @@ class Quitter:
# Now we can hopefully quit without segfaults # Now we can hopefully quit without segfaults
log.destroy.debug("Deferring QApplication::exit...") log.destroy.debug("Deferring QApplication::exit...")
objreg.get('signal-handler').deactivate() objreg.get('signal-handler').deactivate()
try:
objreg.get('session-manager').delete('_autosave') objreg.get('session-manager').delete('_autosave')
except sessions.SessionError as e:
log.sessions.error("Failed to delete autosave session: {}"
.format(e))
# We use a singleshot timer to exit here to minimize the likelihood of # We use a singleshot timer to exit here to minimize the likelihood of
# segfaults. # segfaults.
QTimer.singleShot(0, functools.partial(qApp.exit, status)) QTimer.singleShot(0, functools.partial(qApp.exit, status))

View File

@ -28,7 +28,7 @@ from PyQt5.QtWidgets import QWidget, QApplication
from qutebrowser.keyinput import modeman from qutebrowser.keyinput import modeman
from qutebrowser.config import config from qutebrowser.config import config
from qutebrowser.utils import utils, objreg, usertypes, log, qtutils from qutebrowser.utils import utils, objreg, usertypes, log, qtutils
from qutebrowser.misc import miscwidgets, objects from qutebrowser.misc import miscwidgets, objects, sessions
from qutebrowser.browser import mouse, hints from qutebrowser.browser import mouse, hints
@ -685,13 +685,16 @@ class AbstractTab(QWidget):
@pyqtSlot(bool) @pyqtSlot(bool)
def _on_load_finished(self, ok): def _on_load_finished(self, ok):
sess_manager = objreg.get('session-manager') sess_manager = objreg.get('session-manager')
try:
sess_manager.save('_autosave') sess_manager.save('_autosave')
except sessions.SessionError as e:
log.sessions.error("Failed to save autosave session: {}".format(e))
if ok and not self._has_ssl_errors: if ok and not self._has_ssl_errors:
if self.url().scheme() == 'https': if self.url().scheme() == 'https':
self._set_load_status(usertypes.LoadStatus.success_https) self._set_load_status(usertypes.LoadStatus.success_https)
else: else:
self._set_load_status(usertypes.LoadStatus.success) self._set_load_status(usertypes.LoadStatus.success)
elif ok: elif ok:
self._set_load_status(usertypes.LoadStatus.warn) self._set_load_status(usertypes.LoadStatus.warn)
else: else:

View File

@ -34,7 +34,6 @@ except ImportError: # pragma: no cover
from qutebrowser.utils import (standarddir, objreg, qtutils, log, usertypes, from qutebrowser.utils import (standarddir, objreg, qtutils, log, usertypes,
message, utils) message, utils)
from qutebrowser.commands import cmdexc, cmdutils from qutebrowser.commands import cmdexc, cmdutils
from qutebrowser.mainwindow import mainwindow
from qutebrowser.config import config from qutebrowser.config import config
@ -346,6 +345,7 @@ class SessionManager(QObject):
name: The name of the session to load. name: The name of the session to load.
temp: If given, don't set the current session. temp: If given, don't set the current session.
""" """
from qutebrowser.mainwindow import mainwindow
path = self._get_session_path(name, check_exists=True) path = self._get_session_path(name, check_exists=True)
try: try:
with open(path, encoding='utf-8') as f: with open(path, encoding='utf-8') as f: