/* * This file is part of smolbote. It's copyrighted by the contributors recorded * in the version control history of the file, available from its original * location: https://neueland.iserlohn-fortress.net/gitea/aqua/smolbote * * SPDX-License-Identifier: GPL-3.0 */ #include "session.h" #include "mainwindow/mainwindow.h" #include "subwindow/subwindow.h" #include #include #include "webengine/webview.h" #include "profilemanager.h" #include "browser.h" #include "../webengine/webview.h" #include QJsonObject Session::session(QVector windows) { QJsonObject obj; QJsonArray windowsArray; for(const MainWindow *window : windows) { windowsArray.append(Session::window(window)); } obj.insert("windows", windowsArray); return obj; } QJsonObject Session::window(const MainWindow *window) { QJsonObject obj; auto *profileManager = dynamic_cast(qApp)->getProfileManager(); QJsonArray subwindows; for(const SubWindow *subwindow : window->subWindows()) { QJsonObject window; window.insert("profile", profileManager->id(subwindow->profile())); QJsonArray tabs; for(int i = 0; i < subwindow->tabCount(); ++i) { QJsonObject tab; tab.insert("url", subwindow->view(i)->url().toString()); tab.insert("profile", profileManager->id(subwindow->view(i)->profile())); tabs.append(tab); } window.insert("tabs", tabs); subwindows.append(window); } obj.insert("subwindows", subwindows); return obj; } QJsonObject Session::window(const QString &profile, const QStringList &urls) { QJsonObject session; QJsonArray subwindows; { QJsonObject window; window.insert("profile", profile); QJsonArray tabs; for(const auto &url : urls) { QJsonObject tab; tab.insert("url", url); tab.insert("profile", profile); tabs.append(tab); } window.insert("tabs", tabs); subwindows.append(window); } session.insert("subwindows", subwindows); return session; } QJsonObject Session::view(const WebView *view) { auto *profileManager = dynamic_cast(qApp)->getProfileManager(); Q_CHECK_PTR(profileManager); QByteArray historyData; QDataStream historyStream(&historyData, QIODevice::WriteOnly); historyStream << *view->history(); QJsonObject viewData; viewData.insert("url", view->url().toString()); viewData.insert("profile", profileManager->id(view->profile())); //viewData.insert("history", QString(qCompress(historyData).toBase64())); viewData.insert("history", QString(historyData.toBase64())); return viewData; } void Session::restoreView(WebView *view, const QJsonObject &data) { auto *profileManager = dynamic_cast(qApp)->getProfileManager(); Q_CHECK_PTR(profileManager); auto *profile = profileManager->profile(data["profile"].toString()); if(profile) view->setProfile(profile); QByteArray historyData = QByteArray::fromBase64(data["history"].toString().toLatin1()); QDataStream historyStream(&historyData, QIODevice::ReadOnly); historyStream >> *view->history(); }