diff options
Diffstat (limited to 'lib/webengine/webview.cpp')
-rw-r--r-- | lib/webengine/webview.cpp | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/lib/webengine/webview.cpp b/lib/webengine/webview.cpp new file mode 100644 index 0000000..bc52102 --- /dev/null +++ b/lib/webengine/webview.cpp @@ -0,0 +1,87 @@ +/* + * 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 "webview.h" +#include "webpage.h" +#include "webprofile.h" +#include "webprofilemanager.h" +#include "webviewcontextmenu.h" +#include <QContextMenuEvent> +#include <QWebEngineHistoryItem> + +WebView::WebView(QWidget *parent) + : QWebEngineView(parent) +{ + // load status and progress + connect(this, &QWebEngineView::loadStarted, this, [this]() { + m_loaded = false; + }); + connect(this, &QWebEngineView::loadFinished, this, [this]() { + m_loaded = true; + }); + + // TODO for Qt 5.15, check for fix on QTBUG 65223 + connect(this, &QWebEngineView::loadProgress, this, [this](int progress) { + if(progress == 100) { + emit loadFinished(true); + } + }); +} + +WebView::WebView(WebProfile *profile, cb_createWindow_t cb, QWidget *parent) + : WebView(parent) +{ + cb_createWindow = cb; + setProfile(profile); +} + +WebView::WebView(const Session::WebView &webview_data, cb_createWindow_t cb, QWidget *parent) + : WebView(parent) +{ + cb_createWindow = cb; + WebProfileManager profileManager; + setProfile(profileManager.profile(webview_data.profile)); + + if(!webview_data.url.isEmpty()) + load(QUrl::fromUserInput(webview_data.url)); + else { + QByteArray copy(webview_data.history); + QDataStream historyStream(©, QIODevice::ReadOnly); + historyStream >> *history(); + } +} + +void WebView::setProfile(WebProfile *profile) +{ + m_profile = (profile == nullptr) ? WebProfile::defaultProfile() : profile; + const auto url = this->url(); + setPage(new WebPage(m_profile, this)); + this->load(url); +} + +Session::WebView WebView::serialize() const +{ + QByteArray historyData; + QDataStream historyStream(&historyData, QIODevice::WriteOnly); + historyStream << *history(); + + return { profile()->getId(), QString(), historyData }; +} + +void WebView::search(const QString &term) +{ + const QString searchUrl = m_profile->search().arg(QString(QUrl::toPercentEncoding(term))); + load(searchUrl); +} + +void WebView::contextMenuEvent(QContextMenuEvent *event) +{ + auto *menu = new WebViewContextMenu(this); + //const auto ctxdata = page()->contextMenuData(); + menu->exec(event->globalPos()); +} |