mirror of
https://invent.kde.org/network/falkon.git
synced 2024-12-20 18:56:34 +01:00
RestoreManager: Make RestoreData into a struct with stream operators
This makes it possible to extend it while keeping backwards compatibility.
This commit is contained in:
parent
150c576661
commit
482f446712
@ -429,12 +429,12 @@ void MainApplication::openSession(BrowserWindow* window, RestoreData &restoreDat
|
||||
if (window->tabWidget()->normalTabsCount() > 1) {
|
||||
// This can only happen when recovering crashed session!
|
||||
// Don't restore tabs in current window as user already opened some new tabs.
|
||||
createWindow(Qz::BW_OtherRestoredWindow)->restoreWindow(restoreData.takeAt(0));
|
||||
createWindow(Qz::BW_OtherRestoredWindow)->restoreWindow(restoreData.windows.takeAt(0));
|
||||
} else {
|
||||
window->restoreWindow(restoreData.takeAt(0));
|
||||
window->restoreWindow(restoreData.windows.takeAt(0));
|
||||
}
|
||||
|
||||
foreach (const BrowserWindow::SavedWindow &data, restoreData) {
|
||||
foreach (const BrowserWindow::SavedWindow &data, restoreData.windows) {
|
||||
BrowserWindow* window = createWindow(Qz::BW_OtherRestoredWindow);
|
||||
window->restoreWindow(data);
|
||||
}
|
||||
@ -444,7 +444,7 @@ void MainApplication::openSession(BrowserWindow* window, RestoreData &restoreDat
|
||||
|
||||
bool MainApplication::restoreSession(BrowserWindow* window, RestoreData restoreData)
|
||||
{
|
||||
if (m_isPrivate || restoreData.isEmpty()) {
|
||||
if (m_isPrivate || !restoreData.isValid()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -724,15 +724,17 @@ void MainApplication::postLaunch()
|
||||
|
||||
QByteArray MainApplication::saveState() const
|
||||
{
|
||||
RestoreData restoreData;
|
||||
restoreData.windows.reserve(m_windows.count());
|
||||
for (BrowserWindow *window : qAsConst(m_windows)) {
|
||||
restoreData.windows.append(BrowserWindow::SavedWindow(window));
|
||||
}
|
||||
|
||||
QByteArray data;
|
||||
QDataStream stream(&data, QIODevice::WriteOnly);
|
||||
|
||||
stream << Qz::sessionVersion;
|
||||
stream << m_windows.count();
|
||||
|
||||
for (BrowserWindow *window : qAsConst(m_windows)) {
|
||||
stream << BrowserWindow::SavedWindow(window);
|
||||
}
|
||||
stream << restoreData;
|
||||
|
||||
return data;
|
||||
}
|
||||
|
@ -45,7 +45,7 @@ QJsonArray RecoveryJsObject::restoreData() const
|
||||
QJsonArray out;
|
||||
|
||||
int i = 0;
|
||||
Q_FOREACH (const BrowserWindow::SavedWindow &w, m_manager->restoreData()) {
|
||||
Q_FOREACH (const BrowserWindow::SavedWindow &w, m_manager->restoreData().windows) {
|
||||
int j = 0;
|
||||
QJsonArray tabs;
|
||||
Q_FOREACH (const WebTab::SavedTab &t, w.tabs) {
|
||||
@ -93,17 +93,17 @@ void RecoveryJsObject::restoreSession(const QStringList &excludeWin, const QStri
|
||||
int win = excludeWin.at(i).toInt();
|
||||
int tab = excludeTab.at(i).toInt();
|
||||
|
||||
if (!QzTools::containsIndex(data, win) || !QzTools::containsIndex(data.at(win).tabs, tab))
|
||||
if (!QzTools::containsIndex(data.windows, win) || !QzTools::containsIndex(data.windows.at(win).tabs, tab))
|
||||
continue;
|
||||
|
||||
BrowserWindow::SavedWindow &wd = data[win];
|
||||
BrowserWindow::SavedWindow &wd = data.windows[win];
|
||||
|
||||
wd.tabs.remove(tab);
|
||||
if (wd.currentTab >= tab)
|
||||
--wd.currentTab;
|
||||
|
||||
if (wd.tabs.isEmpty()) {
|
||||
data.remove(win);
|
||||
data.windows.remove(win);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -22,6 +22,48 @@
|
||||
|
||||
#include <QFile>
|
||||
|
||||
static const int restoreDataVersion = 0;
|
||||
|
||||
bool RestoreData::isValid() const
|
||||
{
|
||||
return !windows.isEmpty();
|
||||
}
|
||||
|
||||
void RestoreData::clear()
|
||||
{
|
||||
windows.clear();
|
||||
}
|
||||
|
||||
QDataStream &operator<<(QDataStream &stream, const RestoreData &data)
|
||||
{
|
||||
stream << data.windows.count();
|
||||
for (const BrowserWindow::SavedWindow &window : qAsConst(data.windows)) {
|
||||
stream << window;
|
||||
}
|
||||
|
||||
stream << restoreDataVersion;
|
||||
|
||||
return stream;
|
||||
}
|
||||
|
||||
QDataStream &operator>>(QDataStream &stream, RestoreData &data)
|
||||
{
|
||||
int windowCount;
|
||||
stream >> windowCount;
|
||||
data.windows.reserve(windowCount);
|
||||
|
||||
for (int i = 0; i < windowCount; ++i) {
|
||||
BrowserWindow::SavedWindow window;
|
||||
stream >> window;
|
||||
data.windows.append(window);
|
||||
}
|
||||
|
||||
int version;
|
||||
stream >> version;
|
||||
|
||||
return stream;
|
||||
}
|
||||
|
||||
RestoreManager::RestoreManager(const QString &file)
|
||||
: m_recoveryObject(new RecoveryJsObject(this))
|
||||
{
|
||||
@ -40,7 +82,7 @@ RestoreData RestoreManager::restoreData() const
|
||||
|
||||
bool RestoreManager::isValid() const
|
||||
{
|
||||
return !m_data.isEmpty();
|
||||
return m_data.isValid();
|
||||
}
|
||||
|
||||
QObject *RestoreManager::recoveryObject(WebPage *page)
|
||||
@ -51,22 +93,14 @@ QObject *RestoreManager::recoveryObject(WebPage *page)
|
||||
|
||||
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);
|
||||
}
|
||||
stream >> data;
|
||||
}
|
||||
|
||||
static void loadVersion3(QDataStream &stream, RestoreData &data)
|
||||
{
|
||||
int windowCount;
|
||||
stream >> windowCount;
|
||||
data.reserve(windowCount);
|
||||
data.windows.reserve(windowCount);
|
||||
|
||||
for (int i = 0; i < windowCount; ++i) {
|
||||
QByteArray tabsState;
|
||||
@ -96,7 +130,7 @@ static void loadVersion3(QDataStream &stream, RestoreData &data)
|
||||
}
|
||||
stream2 >> window.currentTab;
|
||||
|
||||
data.append(window);
|
||||
data.windows.append(window);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -25,7 +25,16 @@
|
||||
class WebPage;
|
||||
class RecoveryJsObject;
|
||||
|
||||
using RestoreData = QVector<BrowserWindow::SavedWindow>;
|
||||
struct QUPZILLA_EXPORT RestoreData
|
||||
{
|
||||
QVector<BrowserWindow::SavedWindow> windows;
|
||||
|
||||
bool isValid() const;
|
||||
void clear();
|
||||
|
||||
friend QUPZILLA_EXPORT QDataStream &operator<<(QDataStream &stream, const RestoreData &data);
|
||||
friend QUPZILLA_EXPORT QDataStream &operator>>(QDataStream &stream, RestoreData &data);
|
||||
};
|
||||
|
||||
class FALKON_EXPORT RestoreManager
|
||||
{
|
||||
|
@ -90,7 +90,7 @@ void SessionManager::openSession(QString sessionFilePath, SessionFlags flags)
|
||||
RestoreData sessionData;
|
||||
RestoreManager::createFromFile(sessionFilePath, sessionData);
|
||||
|
||||
if (sessionData.isEmpty())
|
||||
if (!sessionData.isValid())
|
||||
return;
|
||||
|
||||
BrowserWindow* window = mApp->getWindow();
|
||||
|
Loading…
Reference in New Issue
Block a user