Handle private browsing in sessions
This commit is contained in:
parent
f907b6b6b0
commit
9805b43c85
@ -213,7 +213,7 @@ class SessionManager(QObject):
|
||||
data['history'].append(item_data)
|
||||
return data
|
||||
|
||||
def _save_all(self, *, only_window=None):
|
||||
def _save_all(self, *, only_window=None, with_private=False):
|
||||
"""Get a dict with data for all windows/tabs."""
|
||||
data = {'windows': []}
|
||||
if only_window is not None:
|
||||
@ -231,12 +231,17 @@ class SessionManager(QObject):
|
||||
if sip.isdeleted(main_window):
|
||||
continue
|
||||
|
||||
if tabbed_browser.private and not with_private:
|
||||
continue
|
||||
|
||||
win_data = {}
|
||||
active_window = QApplication.instance().activeWindow()
|
||||
if getattr(active_window, 'win_id', None) == win_id:
|
||||
win_data['active'] = True
|
||||
win_data['geometry'] = bytes(main_window.saveGeometry())
|
||||
win_data['tabs'] = []
|
||||
if tabbed_browser.private:
|
||||
win_data['private'] = True
|
||||
for i, tab in enumerate(tabbed_browser.widgets()):
|
||||
active = i == tabbed_browser.currentIndex()
|
||||
win_data['tabs'].append(self._save_tab(tab, active))
|
||||
@ -260,7 +265,7 @@ class SessionManager(QObject):
|
||||
return name
|
||||
|
||||
def save(self, name, last_window=False, load_next_time=False,
|
||||
only_window=None):
|
||||
only_window=None, with_private=False):
|
||||
"""Save a named session.
|
||||
|
||||
Args:
|
||||
@ -270,6 +275,7 @@ class SessionManager(QObject):
|
||||
instead of the currently open state.
|
||||
load_next_time: If set, prepares this session to be load next time.
|
||||
only_window: If set, only tabs in the specified window is saved.
|
||||
with_private: Include private windows.
|
||||
|
||||
Return:
|
||||
The name of the saved session.
|
||||
@ -284,7 +290,8 @@ class SessionManager(QObject):
|
||||
log.sessions.error("last_window_session is None while saving!")
|
||||
return
|
||||
else:
|
||||
data = self._save_all(only_window=only_window)
|
||||
data = self._save_all(only_window=only_window,
|
||||
with_private=with_private)
|
||||
log.sessions.vdebug("Saving data: {}".format(data))
|
||||
try:
|
||||
with qtutils.savefile_open(path) as f:
|
||||
@ -380,7 +387,7 @@ class SessionManager(QObject):
|
||||
log.sessions.debug("Loading session {} from {}...".format(name, path))
|
||||
for win in data['windows']:
|
||||
window = mainwindow.MainWindow(geometry=win['geometry'],
|
||||
private=win.get('private', False))
|
||||
private=win.get('private', None))
|
||||
window.show()
|
||||
tabbed_browser = objreg.get('tabbed-browser', scope='window',
|
||||
window=window.win_id)
|
||||
@ -445,7 +452,8 @@ class SessionManager(QObject):
|
||||
@cmdutils.argument('name', completion=usertypes.Completion.sessions)
|
||||
@cmdutils.argument('win_id', win_id=True)
|
||||
def session_save(self, name: str = default, current=False, quiet=False,
|
||||
force=False, only_active_window=False, win_id=None):
|
||||
force=False, only_active_window=False, with_private=False,
|
||||
win_id=None):
|
||||
"""Save a session.
|
||||
|
||||
Args:
|
||||
@ -455,6 +463,7 @@ class SessionManager(QObject):
|
||||
quiet: Don't show confirmation message.
|
||||
force: Force saving internal sessions (starting with an underline).
|
||||
only_active_window: Saves only tabs of the currently active window.
|
||||
with_private: Include private windows.
|
||||
"""
|
||||
if name is not default and name.startswith('_') and not force:
|
||||
raise cmdexc.CommandError("{} is an internal session, use --force "
|
||||
@ -466,9 +475,10 @@ class SessionManager(QObject):
|
||||
assert not name.startswith('_')
|
||||
try:
|
||||
if only_active_window:
|
||||
name = self.save(name, only_window=win_id)
|
||||
name = self.save(name, only_window=win_id,
|
||||
with_private=with_private)
|
||||
else:
|
||||
name = self.save(name)
|
||||
name = self.save(name, with_private=with_private)
|
||||
except SessionError as e:
|
||||
raise cmdexc.CommandError("Error while saving session: {}"
|
||||
.format(e))
|
||||
|
@ -576,7 +576,7 @@ class QuteProc(testprocess.Process):
|
||||
"""Save the session and get the parsed session data."""
|
||||
with tempfile.TemporaryDirectory() as tmpdir:
|
||||
session = os.path.join(tmpdir, 'session.yml')
|
||||
self.send_cmd(':session-save "{}"'.format(session))
|
||||
self.send_cmd(':session-save --with-private "{}"'.format(session))
|
||||
self.wait_for(category='message', loglevel=logging.INFO,
|
||||
message='Saved session {}.'.format(session))
|
||||
with open(session, encoding='utf-8') as f:
|
||||
|
Loading…
Reference in New Issue
Block a user