diff options
author | Marcus Tillmanns <[email protected]> | 2024-10-09 16:43:00 +0200 |
---|---|---|
committer | Marcus Tillmanns <[email protected]> | 2024-10-14 08:00:55 +0000 |
commit | e21c24dc634f45322d4ebb013b2c98ed181d0e29 (patch) | |
tree | b8da80751acfe9a888ad57aebcce5e0897599f4a /src/plugins/extensionmanager/extensionmanagerwidget.cpp | |
parent | 5b961a0a917ac30ed423a1b69cf102357714303e (diff) |
ExtensionManager: Work directly on the browsers document
Change-Id: I28fd149aa484d6c5165b94d574011dd95030a2ef
Reviewed-by: Alessandro Portale <[email protected]>
Diffstat (limited to 'src/plugins/extensionmanager/extensionmanagerwidget.cpp')
-rw-r--r-- | src/plugins/extensionmanager/extensionmanagerwidget.cpp | 40 |
1 files changed, 25 insertions, 15 deletions
diff --git a/src/plugins/extensionmanager/extensionmanagerwidget.cpp b/src/plugins/extensionmanager/extensionmanagerwidget.cpp index a2c4e7bebad..19cf95a63aa 100644 --- a/src/plugins/extensionmanager/extensionmanagerwidget.cpp +++ b/src/plugins/extensionmanager/extensionmanagerwidget.cpp @@ -497,15 +497,20 @@ public: }); connect(this, &QTextDocument::contentsChanged, this, [this]() { - if (m_imageLoaderTree.isRunning()) + if (m_urlsToLoad.isEmpty()) + return; + + if (m_imageLoaderTree.isRunning()) { + if (!m_needsToRestartLoading) + return; m_imageLoaderTree.cancel(); + } - if (urlsToLoad.isEmpty()) - return; + m_needsToRestartLoading = false; using namespace Tasking; - const LoopList iterator(urlsToLoad); + const LoopList iterator(m_urlsToLoad); auto onQuerySetup = [iterator](NetworkQuery &query) { query.setRequest(QNetworkRequest(*iterator)); @@ -513,6 +518,10 @@ public: }; auto onQueryDone = [this](const NetworkQuery &query, DoneWith result) { + if (result == DoneWith::Cancel) + return; + m_urlsToLoad.removeOne(query.reply()->url()); + if (result == DoneWith::Success) m_imageHandler.set(query.reply()->url().toString(), query.reply()->readAll()); else { @@ -527,7 +536,6 @@ public: NetworkQueryTask{onQuerySetup, onQueryDone}, }, onGroupDone([this]() { - urlsToLoad.clear(); markContentsDirty(0, this->characterCount()); }) }; @@ -537,11 +545,16 @@ public: }); } - void scheduleLoad(const QUrl &url) { urlsToLoad.append(url); } + void scheduleLoad(const QUrl &url) + { + m_urlsToLoad.append(url); + m_needsToRestartLoading = true; + } private: AnimatedImageHandler m_imageHandler; - QList<QUrl> urlsToLoad; + QList<QUrl> m_urlsToLoad; + bool m_needsToRestartLoading = false; Tasking::TaskTreeRunner m_imageLoaderTree; }; @@ -730,13 +743,12 @@ ExtensionManagerWidget::ExtensionManagerWidget() updateView({}); } -static QString markdownToHtml(const QString &markdown) +static void setMarkdown(QTextDocument *document, const QString &markdown) { - QTextDocument doc; - doc.setMarkdown(markdown); - doc.setDefaultFont(contentTF.font()); + document->setMarkdown(markdown); + document->setDefaultFont(contentTF.font()); - for (QTextBlock block = doc.begin(); block != doc.end(); block = block.next()) { + for (QTextBlock block = document->begin(); block != document->end(); block = block.next()) { QTextBlockFormat blockFormat = block.blockFormat(); // Leave images as they are. if (block.text().contains(QChar::ObjectReplacementCharacter)) @@ -775,8 +787,6 @@ static QString markdownToHtml(const QString &markdown) } } } - - return doc.toHtml(); } void ExtensionManagerWidget::updateView(const QModelIndex ¤t) @@ -805,7 +815,7 @@ void ExtensionManagerWidget::updateView(const QModelIndex ¤t) current.data(RoleDescriptionLong).toString() }; const QString descriptionMarkdown = description.join("\n"); - m_description->setText(markdownToHtml(descriptionMarkdown)); + setMarkdown(m_description->document(), descriptionMarkdown); } { |