diff options
Diffstat (limited to 'src/webengine')
-rw-r--r-- | src/webengine/webview.cpp | 47 | ||||
-rw-r--r-- | src/webengine/webview.h | 10 |
2 files changed, 50 insertions, 7 deletions
diff --git a/src/webengine/webview.cpp b/src/webengine/webview.cpp index d42bad5..c64333e 100644 --- a/src/webengine/webview.cpp +++ b/src/webengine/webview.cpp @@ -13,15 +13,12 @@ #include "webprofilemanager.h" #include "webviewcontextmenu.h" #include <QContextMenuEvent> +#include <QJsonObject> #include <QWebEngineHistoryItem> -WebView::WebView(WebProfile *profile, QWidget *parent) +WebView::WebView(QWidget *parent) : QWebEngineView(parent) { - Q_CHECK_PTR(profile); - m_profile = profile; - setPage(new WebPage(profile, this)); - m_parentWindow = qobject_cast<SubWindow *>(parent); // load status and progress @@ -40,6 +37,34 @@ WebView::WebView(WebProfile *profile, QWidget *parent) }); } +WebView::WebView(WebProfile *profile, QWidget *parent) + : WebView(parent) +{ + Q_CHECK_PTR(profile); + m_profile = profile; + setPage(new WebPage(profile, this)); +} + +WebView::WebView(const Session::WebView &data, QWidget *parent) + : WebView(parent) +{ + const auto *profileManager = WebProfileManager::instance(); + Q_CHECK_PTR(profileManager); + + auto *profile = profileManager->profile(data.profile); + if(profile != nullptr) { + setProfile(profile); + } + + if(!data.url.isEmpty()) + load(QUrl::fromUserInput(data.url)); + else { + QByteArray copy(data.history); + QDataStream historyStream(©, QIODevice::ReadOnly); + historyStream >> *history(); + } +} + void WebView::setProfile(WebProfile *profile) { m_profile = profile; @@ -48,6 +73,18 @@ void WebView::setProfile(WebProfile *profile) this->load(url); } +Session::WebView WebView::serialize() const +{ + const auto *profileManager = WebProfileManager::instance(); + Q_CHECK_PTR(profileManager); + + QByteArray historyData; + QDataStream historyStream(&historyData, QIODevice::WriteOnly); + historyStream << *history(); + + return { profileManager->id(profile()), QString(), historyData }; +} + bool WebView::isLoaded() const { return m_loaded; diff --git a/src/webengine/webview.h b/src/webengine/webview.h index 0223b78..5748691 100644 --- a/src/webengine/webview.h +++ b/src/webengine/webview.h @@ -11,26 +11,32 @@ #include "webpage.h" #include <QWebEngineView> +#include <session.hpp> class WebProfile; class SubWindow; class WebViewContextMenu; -class WebView : public QWebEngineView +class WebView final : public QWebEngineView { friend class WebViewContextMenu; Q_OBJECT + explicit WebView(QWidget *parent = nullptr); + public: explicit WebView(WebProfile *profile = nullptr, QWidget *parent = nullptr); + explicit WebView(const Session::WebView &data, QWidget *parent = nullptr); ~WebView() = default; - WebProfile *profile() const + [[nodiscard]] WebProfile *profile() const { return m_profile; } void setProfile(WebProfile *profile); + [[nodiscard]] Session::WebView serialize() const; + bool isLoaded() const; public slots: |