diff --git a/src/librssguard/gui/webviewers/webengine/webengineviewer.cpp b/src/librssguard/gui/webviewers/webengine/webengineviewer.cpp index 73cce39cc..36ab04315 100644 --- a/src/librssguard/gui/webviewers/webengine/webengineviewer.cpp +++ b/src/librssguard/gui/webviewers/webengine/webengineviewer.cpp @@ -202,34 +202,38 @@ QUrl WebEngineViewer::url() const { return QWebEngineView::url(); } -QByteArray WebEngineViewer::getJsEnabledHtml(QObject* parent, const QString& url) { - QByteArray res; +QByteArray WebEngineViewer::getJsEnabledHtml(const QString& url) { + WebEnginePage* page = new WebEnginePage(); + WebEngineViewer* viewer = nullptr; QMetaObject::invokeMethod( qApp, [&] { - QGraphicsScene* scene = new QGraphicsScene(parent); - QGraphicsView* view = new QGraphicsView(scene, qApp->mainFormWidget()); - - WebEngineViewer* viewer = new WebEngineViewer(qApp->mainFormWidget()); - WebEnginePage* page = new WebEnginePage(viewer); - - scene->addWidget(viewer); - - viewer->resize(3800, 2100); - view->show(); - viewer->setPage(page); - - res = page->pageHtml(url).toUtf8(); - - delete scene; - // delete view; - // delete viewer; - // delete viewer; + // NOTE: Must be create on main thread. + viewer = new WebEngineViewer(); }, Qt::ConnectionType::BlockingQueuedConnection); - return res; + viewer->moveToThread(qApp->thread()); + page->moveToThread(qApp->thread()); + + viewer->setPage(page); + viewer->setAttribute(Qt::WidgetAttribute::WA_DontShowOnScreen, true); + viewer->setAttribute(Qt::WidgetAttribute::WA_DeleteOnClose, true); + + QMetaObject::invokeMethod(viewer, "show", Qt::ConnectionType::BlockingQueuedConnection); + + QString html; + QMetaObject::invokeMethod(page, + "pageHtml", + Qt::ConnectionType::BlockingQueuedConnection, + Q_RETURN_ARG(QString, html), + Q_ARG(QString, url)); + + page->deleteLater(); + viewer->close(); + + return html.toUtf8(); } ContextMenuData WebEngineViewer::provideContextMenuData(QContextMenuEvent* event) const { diff --git a/src/librssguard/gui/webviewers/webengine/webengineviewer.h b/src/librssguard/gui/webviewers/webengine/webengineviewer.h index 0d9e027e2..73ccace29 100644 --- a/src/librssguard/gui/webviewers/webengine/webengineviewer.h +++ b/src/librssguard/gui/webviewers/webengine/webengineviewer.h @@ -37,7 +37,7 @@ class WebEngineViewer : public QWebEngineView, public WebViewer { virtual QString html() const; virtual QUrl url() const; - static QByteArray getJsEnabledHtml(QObject* parent, const QString& url); + static QByteArray getJsEnabledHtml(const QString& url); signals: void pageTitleChanged(const QString& new_title); diff --git a/src/librssguard/network-web/webengine/webenginepage.cpp b/src/librssguard/network-web/webengine/webenginepage.cpp index d975ddc49..2358fd8b6 100644 --- a/src/librssguard/network-web/webengine/webenginepage.cpp +++ b/src/librssguard/network-web/webengine/webenginepage.cpp @@ -43,8 +43,7 @@ QString WebEnginePage::pageHtml(const QString& url) { loop.exec(); // Page is loaded. Send artificial scroll-to-bottom and wait for changes to end. - - runJavaScript("window.resizeTo(3800, 2100);"); + // runJavaScript("window.resizeTo(3800, 2100);"); runJavaScript(IOFactory::readFile(BUILTIN_JS_FOLDER + QL1C('/') + OBSERVER_JS_FILE)); loop.exec(); diff --git a/src/librssguard/services/standard/standardfeed.cpp b/src/librssguard/services/standard/standardfeed.cpp index 7fcaf553b..1f4454b0e 100644 --- a/src/librssguard/services/standard/standardfeed.cpp +++ b/src/librssguard/services/standard/standardfeed.cpp @@ -297,7 +297,7 @@ StandardFeed* StandardFeed::guessFeed(StandardFeed::SourceType source_type, } else if (source_type == StandardFeed::SourceType::EmbeddedBrowser) { #if defined(NO_LITE) - feed_contents = WebEngineViewer::getJsEnabledHtml(qApp, source); + feed_contents = WebEngineViewer::getJsEnabledHtml(source); #else throw ApplicationException(tr("this source type cannot be used on 'lite' %1 build").arg(QSL(APP_NAME))); #endif diff --git a/src/librssguard/services/standard/standardserviceroot.cpp b/src/librssguard/services/standard/standardserviceroot.cpp index df1f03214..7f94c8ab2 100644 --- a/src/librssguard/services/standard/standardserviceroot.cpp +++ b/src/librssguard/services/standard/standardserviceroot.cpp @@ -242,48 +242,7 @@ QList StandardServiceRoot::obtainNewMessages(Feed* feed, } else if (f->sourceType() == StandardFeed::SourceType::EmbeddedBrowser) { #if defined(NO_LITE) - WebEnginePage* page = new WebEnginePage(); - WebEngineViewer* viewer = nullptr; - - QMetaObject::invokeMethod( - qApp, - [&] { - // NOTE: Must be create on main thread. - viewer = new WebEngineViewer(); - }, - Qt::ConnectionType::BlockingQueuedConnection); - - viewer->moveToThread(qApp->thread()); - page->moveToThread(qApp->thread()); - - viewer->setPage(page); - viewer->setAttribute(Qt::WidgetAttribute::WA_DontShowOnScreen, true); - viewer->setAttribute(Qt::WidgetAttribute::WA_DontShowOnScreen, true); - viewer->setAttribute(Qt::WidgetAttribute::WA_DeleteOnClose, true); - - // QMetaObject::invokeMethod(viewer, "show", Qt::ConnectionType::BlockingQueuedConnection); - - QMetaObject::invokeMethod( - viewer, - [&] { - viewer->show(); - viewer->resize(3800, 2100); - // viewer->hide(); - }, - Qt::ConnectionType::BlockingQueuedConnection); - - QString html; - QMetaObject::invokeMethod(page, - "pageHtml", - Qt::ConnectionType::BlockingQueuedConnection, - Q_RETURN_ARG(QString, html), - Q_ARG(QString, f->source())); - - feed_contents = html.toUtf8(); - - page->deleteLater(); - viewer->close(); - // viewer->deleteLater(); + feed_contents = WebEngineViewer::getJsEnabledHtml(f->source()); #else throw ApplicationException(tr("this source type cannot be used on 'lite' %1 build").arg(QSL(APP_NAME))); #endif