Change structure of session file + also save window geometry

Bump session file version to 4.

Added support for old version to RestoreManager to prevent losing
old saved sessions.
remotes/origin/Falkon/3.0
David Rosca 8 years ago
parent 25b1583770
commit ed39aefdad
  1. 54
      src/lib/app/browserwindow.cpp
  2. 3
      src/lib/app/qzcommon.cpp
  3. 4
      src/lib/app/qzcommon.h
  4. 70
      src/lib/session/restoremanager.cpp

@ -85,6 +85,8 @@
#include <xcb/xcb_atom.h>
#endif
static const int savedWindowVersion = 1;
BrowserWindow::SavedWindow::SavedWindow()
{
}
@ -135,55 +137,43 @@ void BrowserWindow::SavedWindow::clear()
QDataStream &operator<<(QDataStream &stream, const BrowserWindow::SavedWindow &window)
{
QByteArray tabsState;
QByteArray windowState;
#ifdef QZ_WS_X11
QDataStream stream1(&windowState, QIODevice::WriteOnly);
stream1 << window.windowState;
stream1 << window.virtualDesktop;
#else
windowState = window.windowState;
#endif
stream << savedWindowVersion;
stream << window.windowState;
stream << window.windowGeometry;
stream << window.virtualDesktop;
stream << window.currentTab;
stream << window.tabs.count();
QDataStream stream2(&tabsState, QIODevice::WriteOnly);
stream2 << window.tabs.count();
for (const WebTab::SavedTab &tab : qAsConst(window.tabs)) {
stream2 << tab;
for (int i = 0; i < window.tabs.count(); ++i) {
stream << window.tabs.at(i);
}
stream2 << window.currentTab;
stream << tabsState;
stream << windowState;
return stream;
}
QDataStream &operator>>(QDataStream &stream, BrowserWindow::SavedWindow &window)
{
QByteArray tabsState;
QByteArray windowState;
int version;
stream >> version;
stream >> tabsState;
stream >> windowState;
if (version < 1) {
return stream;
}
#ifdef QZ_WS_X11
QDataStream stream1(&windowState, QIODevice::ReadOnly);
stream1 >> window.windowState;
stream1 >> window.virtualDesktop;
#else
window.windowState = windowState;
#endif
stream >> window.windowState;
stream >> window.windowGeometry;
stream >> window.virtualDesktop;
stream >> window.currentTab;
int tabsCount = -1;
QDataStream stream2(&tabsState, QIODevice::ReadOnly);
stream2 >> tabsCount;
stream >> tabsCount;
window.tabs.reserve(tabsCount);
for (int i = 0; i < tabsCount; ++i) {
WebTab::SavedTab tab;
stream2 >> tab;
stream >> tab;
window.tabs.append(tab);
}
stream2 >> window.currentTab;
return stream;
}

@ -19,8 +19,7 @@
namespace Qz
{
const int sessionVersion = 0x0003;
const int sessionVersionQt5 = 0x0003 | 0x050000;
const int sessionVersion = 0x0004;
const int bookmarksVersion = 1;
FALKON_EXPORT const char* APPNAME = "Falkon";

@ -1,6 +1,6 @@
/* ============================================================
* Falkon - Qt web browser
* Copyright (C) 2010-2017 David Rosca <nowrep@gmail.com>
* Copyright (C) 2010-2018 David Rosca <nowrep@gmail.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -51,8 +51,6 @@ namespace Qz
{
// Version of session.dat file
extern const int sessionVersion;
// Backwards compatibility (used to be different for Qt4 and Qt5)
extern const int sessionVersionQt5;
// Version of bookmarks.json file
extern const int bookmarksVersion;

@ -49,6 +49,58 @@ QObject *RestoreManager::recoveryObject(WebPage *page)
return m_recoveryObject;
}
static void loadCurrentVersion(QDataStream &stream, RestoreData &data)
{
int windowCount;
stream >> windowCount;
data.reserve(windowCount);
for (int i = 0; i < windowCount; ++i) {
BrowserWindow::SavedWindow window;
stream >> window;
data.append(window);
}
}
static void loadVersion3(QDataStream &stream, RestoreData &data)
{
int windowCount;
stream >> windowCount;
data.reserve(windowCount);
for (int i = 0; i < windowCount; ++i) {
QByteArray tabsState;
QByteArray windowState;
stream >> tabsState;
stream >> windowState;
BrowserWindow::SavedWindow window;
#ifdef QZ_WS_X11
QDataStream stream1(&windowState, QIODevice::ReadOnly);
stream1 >> window.windowState;
stream1 >> window.virtualDesktop;
#else
window.windowState = windowState;
#endif
int tabsCount = -1;
QDataStream stream2(&tabsState, QIODevice::ReadOnly);
stream2 >> tabsCount;
window.tabs.reserve(tabsCount);
for (int i = 0; i < tabsCount; ++i) {
WebTab::SavedTab tab;
stream2 >> tab;
window.tabs.append(tab);
}
stream2 >> window.currentTab;
data.append(window);
}
}
// static
void RestoreManager::createFromFile(const QString &file, RestoreData &data)
{
if (!QFile::exists(file)) {
@ -62,18 +114,12 @@ void RestoreManager::createFromFile(const QString &file, RestoreData &data)
int version;
stream >> version;
if (version != Qz::sessionVersion && version != Qz::sessionVersionQt5) {
return;
}
int windowCount;
stream >> windowCount;
data.reserve(windowCount);
for (int i = 0; i < windowCount; ++i) {
BrowserWindow::SavedWindow window;
stream >> window;
data.append(window);
if (version == Qz::sessionVersion) {
loadCurrentVersion(stream, data);
} else if (version == 0x0003 || version == (0x0003 | 0x050000)) {
loadVersion3(stream, data);
} else {
qWarning() << "Unsupported session file version" << version;
}
}

Loading…
Cancel
Save