From 08a67adc1ce03c3efd158f5ef6f75a0186e8f7e5 Mon Sep 17 00:00:00 2001 From: Martin Rotter Date: Wed, 20 Apr 2022 05:38:13 +0200 Subject: [PATCH] save --- .../qtextbrowser/textbrowserviewer.cpp | 34 +++++++++++++++++-- src/librssguard/miscellaneous/application.cpp | 2 +- 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/src/librssguard/gui/webviewers/qtextbrowser/textbrowserviewer.cpp b/src/librssguard/gui/webviewers/qtextbrowser/textbrowserviewer.cpp index f7c7ff038..1472379bf 100644 --- a/src/librssguard/gui/webviewers/qtextbrowser/textbrowserviewer.cpp +++ b/src/librssguard/gui/webviewers/qtextbrowser/textbrowserviewer.cpp @@ -16,7 +16,8 @@ #include #include -TextBrowserViewer::TextBrowserViewer(QWidget* parent) : QTextBrowser(parent), m_downloader(new Downloader(this)) { +TextBrowserViewer::TextBrowserViewer(QWidget* parent) + : QTextBrowser(parent), m_downloader(new Downloader(this)), m_reloadingWithResources(false) { setAutoFillBackground(true); setFrameShape(QFrame::Shape::NoFrame); setFrameShadow(QFrame::Shadow::Plain); @@ -33,9 +34,15 @@ QVariant TextBrowserViewer::loadResource(int type, const QUrl& name) { if (type == QTextDocument::ResourceType::ImageResource) { m_resourcesForHtml.append(name); } - } - return {}; + return {}; + } + else if (m_loadedResources.contains(name)) { + return QImage::fromData(m_loadedResources.value(name)); + } + else { + return {}; + } } QSize TextBrowserViewer::sizeHint() const { @@ -297,6 +304,8 @@ void TextBrowserViewer::contextMenuEvent(QContextMenuEvent* event) { connect(m_actionReloadWithImages.data(), &QAction::triggered, this, &TextBrowserViewer::reloadWithImages); } + menu->addAction(m_actionReloadWithImages.data()); + auto anchor = anchorAt(event->pos()); if (!anchor.isEmpty()) { @@ -352,7 +361,26 @@ void TextBrowserViewer::reloadWithImages() { m_reloadingWithResources = true; m_loadedResources.clear(); + for (const QUrl& url : m_resourcesForHtml) { + if (m_loadedResources.contains(url)) { + continue; + } + + QEventLoop loop; + + connect(m_downloader.data(), &Downloader::completed, &loop, &QEventLoop::quit); + m_downloader->manipulateData(url.toString(), QNetworkAccessManager::Operation::GetOperation, {}, 5000); + + loop.exec(); + + if (m_downloader->lastOutputError() == QNetworkReply::NetworkError::NoError) { + m_loadedResources.insert(url, m_downloader->lastOutputData()); + } + } + setHtml(html(), m_currentUrl); + + m_reloadingWithResources = false; } void TextBrowserViewer::onAnchorClicked(const QUrl& url) { diff --git a/src/librssguard/miscellaneous/application.cpp b/src/librssguard/miscellaneous/application.cpp index 2642f06d2..bad04e819 100644 --- a/src/librssguard/miscellaneous/application.cpp +++ b/src/librssguard/miscellaneous/application.cpp @@ -642,7 +642,7 @@ void Application::showGuiMessage(Notification::Event event, WebViewer* Application::createWebView() { #if !defined(USE_WEBENGINE) - return new LiteHtmlViewer(); + return new TextBrowserViewer(); #else if (forcedNoWebEngine()) { return new TextBrowserViewer();