From 3692c86a7e4ae4c529669861c74074c646036798 Mon Sep 17 00:00:00 2001 From: Cosmin Popescu Date: Tue, 1 Nov 2016 19:43:37 +0100 Subject: [PATCH 1/4] auto save session --- qutebrowser/browser/browsertab.py | 3 +++ qutebrowser/config/configdata.py | 5 +++++ 2 files changed, 8 insertions(+) diff --git a/qutebrowser/browser/browsertab.py b/qutebrowser/browser/browsertab.py index 29b82d969..cc27c335f 100644 --- a/qutebrowser/browser/browsertab.py +++ b/qutebrowser/browser/browsertab.py @@ -685,6 +685,9 @@ class AbstractTab(QWidget): @pyqtSlot(bool) def _on_load_finished(self, ok): + if config.get('general', 'auto-save-session'): + sess_manager = objreg.get('session-manager') + sess_manager.session_save() if ok and not self._has_ssl_errors: if self.url().scheme() == 'https': self._set_load_status(usertypes.LoadStatus.success_https) diff --git a/qutebrowser/config/configdata.py b/qutebrowser/config/configdata.py index ea3939a44..3d13bf563 100644 --- a/qutebrowser/config/configdata.py +++ b/qutebrowser/config/configdata.py @@ -160,6 +160,11 @@ def data(readonly=False): SettingValue(typ.Bool(), 'true'), "Whether to save the config automatically on quit."), + ('auto-save-session', + SettingValue(typ.Bool(), 'false'), + "Whether to save the session automatically when a page finishes " + "loading."), + ('auto-save-interval', SettingValue(typ.Int(minval=0, maxval=MAXVALS['int']), '15000'), "How often (in milliseconds) to auto-save config/cookies/etc."), From c590a37043488d147ce2bf82debf00e6e486b604 Mon Sep 17 00:00:00 2001 From: Cosmin Popescu Date: Mon, 7 Nov 2016 20:45:46 +0100 Subject: [PATCH 2/4] changed to using an internal _autosave session --- qutebrowser/app.py | 8 ++++++-- qutebrowser/browser/browsertab.py | 5 ++--- qutebrowser/config/configdata.py | 5 ----- 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/qutebrowser/app.py b/qutebrowser/app.py index 68397bbd3..49f06c764 100644 --- a/qutebrowser/app.py +++ b/qutebrowser/app.py @@ -210,14 +210,17 @@ def _load_session(name): name: The name of the session to load, or None to read state file. """ state_config = objreg.get('state-config') + session_manager = objreg.get('session-manager') if name is None: try: name = state_config['general']['session'] except KeyError: # No session given as argument and none in the session file -> # start without loading a session - return - session_manager = objreg.get('session-manager') + if session_manager.exists('_autosave'): + name = '_autosave' + else: + return try: session_manager.load(name) except sessions.SessionNotFoundError: @@ -723,6 +726,7 @@ class Quitter: # Now we can hopefully quit without segfaults log.destroy.debug("Deferring QApplication::exit...") objreg.get('signal-handler').deactivate() + objreg.get('session-manager').session_delete('_autosave', force = True) # We use a singleshot timer to exit here to minimize the likelihood of # segfaults. QTimer.singleShot(0, functools.partial(qApp.exit, status)) diff --git a/qutebrowser/browser/browsertab.py b/qutebrowser/browser/browsertab.py index cc27c335f..193f1695e 100644 --- a/qutebrowser/browser/browsertab.py +++ b/qutebrowser/browser/browsertab.py @@ -685,9 +685,8 @@ class AbstractTab(QWidget): @pyqtSlot(bool) def _on_load_finished(self, ok): - if config.get('general', 'auto-save-session'): - sess_manager = objreg.get('session-manager') - sess_manager.session_save() + sess_manager = objreg.get('session-manager') + sess_manager.session_save('_autosave', quiet = True, force = True) if ok and not self._has_ssl_errors: if self.url().scheme() == 'https': self._set_load_status(usertypes.LoadStatus.success_https) diff --git a/qutebrowser/config/configdata.py b/qutebrowser/config/configdata.py index 3d13bf563..ea3939a44 100644 --- a/qutebrowser/config/configdata.py +++ b/qutebrowser/config/configdata.py @@ -160,11 +160,6 @@ def data(readonly=False): SettingValue(typ.Bool(), 'true'), "Whether to save the config automatically on quit."), - ('auto-save-session', - SettingValue(typ.Bool(), 'false'), - "Whether to save the session automatically when a page finishes " - "loading."), - ('auto-save-interval', SettingValue(typ.Int(minval=0, maxval=MAXVALS['int']), '15000'), "How often (in milliseconds) to auto-save config/cookies/etc."), From 89e6ff6599cbaadcd1c06f58d272e9a0b035ea7d Mon Sep 17 00:00:00 2001 From: Cosmin Popescu Date: Wed, 9 Nov 2016 19:27:48 +0100 Subject: [PATCH 3/4] fix wrong spaces and priority for session restore --- qutebrowser/app.py | 12 ++++++------ qutebrowser/browser/browsertab.py | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/qutebrowser/app.py b/qutebrowser/app.py index 49f06c764..da0d3cd55 100644 --- a/qutebrowser/app.py +++ b/qutebrowser/app.py @@ -211,16 +211,16 @@ def _load_session(name): """ state_config = objreg.get('state-config') session_manager = objreg.get('session-manager') - if name is None: + if name is None and session_manager.exists('_autosave'): + name = '_autosave' + elif name is None: try: name = state_config['general']['session'] except KeyError: # No session given as argument and none in the session file -> # start without loading a session - if session_manager.exists('_autosave'): - name = '_autosave' - else: - return + return + try: session_manager.load(name) except sessions.SessionNotFoundError: @@ -726,7 +726,7 @@ class Quitter: # Now we can hopefully quit without segfaults log.destroy.debug("Deferring QApplication::exit...") objreg.get('signal-handler').deactivate() - objreg.get('session-manager').session_delete('_autosave', force = True) + objreg.get('session-manager').session_delete('_autosave', force=True) # We use a singleshot timer to exit here to minimize the likelihood of # segfaults. QTimer.singleShot(0, functools.partial(qApp.exit, status)) diff --git a/qutebrowser/browser/browsertab.py b/qutebrowser/browser/browsertab.py index 193f1695e..dc88efefc 100644 --- a/qutebrowser/browser/browsertab.py +++ b/qutebrowser/browser/browsertab.py @@ -686,7 +686,7 @@ class AbstractTab(QWidget): @pyqtSlot(bool) def _on_load_finished(self, ok): sess_manager = objreg.get('session-manager') - sess_manager.session_save('_autosave', quiet = True, force = True) + sess_manager.session_save('_autosave', quiet=True, force=True) if ok and not self._has_ssl_errors: if self.url().scheme() == 'https': self._set_load_status(usertypes.LoadStatus.success_https) From 80372eb3f29444bc470baf1b445e4404f04b1130 Mon Sep 17 00:00:00 2001 From: Cosmin Popescu Date: Fri, 13 Jan 2017 18:57:55 +0100 Subject: [PATCH 4/4] stop using the commands handler --- qutebrowser/app.py | 2 +- qutebrowser/browser/browsertab.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/qutebrowser/app.py b/qutebrowser/app.py index da0d3cd55..ca0df1605 100644 --- a/qutebrowser/app.py +++ b/qutebrowser/app.py @@ -726,7 +726,7 @@ class Quitter: # Now we can hopefully quit without segfaults log.destroy.debug("Deferring QApplication::exit...") objreg.get('signal-handler').deactivate() - objreg.get('session-manager').session_delete('_autosave', force=True) + objreg.get('session-manager').delete('_autosave') # We use a singleshot timer to exit here to minimize the likelihood of # segfaults. QTimer.singleShot(0, functools.partial(qApp.exit, status)) diff --git a/qutebrowser/browser/browsertab.py b/qutebrowser/browser/browsertab.py index dc88efefc..58d210e01 100644 --- a/qutebrowser/browser/browsertab.py +++ b/qutebrowser/browser/browsertab.py @@ -686,7 +686,7 @@ class AbstractTab(QWidget): @pyqtSlot(bool) def _on_load_finished(self, ok): sess_manager = objreg.get('session-manager') - sess_manager.session_save('_autosave', quiet=True, force=True) + sess_manager.save('_autosave') if ok and not self._has_ssl_errors: if self.url().scheme() == 'https': self._set_load_status(usertypes.LoadStatus.success_https)