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
log.destroy.debug("Deferring QApplication::exit...")
objreg.get('signal-handler').deactivate()
try:
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
# segfaults.
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.config import config
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
@ -685,13 +685,16 @@ class AbstractTab(QWidget):
@pyqtSlot(bool)
def _on_load_finished(self, ok):
sess_manager = objreg.get('session-manager')
try:
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 self.url().scheme() == 'https':
self._set_load_status(usertypes.LoadStatus.success_https)
else:
self._set_load_status(usertypes.LoadStatus.success)
elif ok:
self._set_load_status(usertypes.LoadStatus.warn)
else:

View File

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