This commit is contained in:
Martin Rotter 2022-04-20 05:38:13 +02:00
parent bc2dbfe70e
commit 08a67adc1c
2 changed files with 32 additions and 4 deletions

View File

@ -16,7 +16,8 @@
#include <QFileIconProvider>
#include <QScrollBar>
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) {

View File

@ -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();