From d6e5ef56d5bbb9d2566853aaa7a5fc44ec44f78d Mon Sep 17 00:00:00 2001 From: hjk Date: Wed, 19 Mar 2025 14:09:25 +0100 Subject: [PATCH] Utils: Make FileStreamer work with http{s) URLs Change-Id: I1b4ae903336db453933da7dfb8ca753eade256a8 Reviewed-by: Jarek Kobus --- src/libs/utils/filestreamer.cpp | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/src/libs/utils/filestreamer.cpp b/src/libs/utils/filestreamer.cpp index 9a81eddbe58..e0176c066ff 100644 --- a/src/libs/utils/filestreamer.cpp +++ b/src/libs/utils/filestreamer.cpp @@ -7,11 +7,14 @@ #include "qtcprocess.h" #include +#include #include #include #include #include +#include +#include #include namespace Utils { @@ -82,7 +85,24 @@ signals: void readyRead(const QByteArray &newData); private: - GroupItem remoteTask() final { + GroupItem remoteTask() final + { + const QStringView scheme = m_filePath.scheme(); + if (scheme == u"http" || scheme == u"https") { + const auto onQuerySetup = [this](NetworkQuery &query) { + const QUrl url = m_filePath.toUrl(); + query.setRequest(QNetworkRequest(url)); + query.setNetworkAccessManager(new QNetworkAccessManager(&query)); + connect(&query, &NetworkQuery::started, this, [this, &query] { + connect(query.reply(), &QNetworkReply::readyRead, this, [this, &query] { + const QByteArray response = query.reply()->readAll(); + emit readyRead(response); + }); + }); + }; + return NetworkQueryTask{onQuerySetup}; + } + const auto setup = [this](Process &process) { const QStringList args = {"if=" + m_filePath.path()}; const FilePath dd = m_filePath.withNewPath("dd"); @@ -94,7 +114,9 @@ private: }; return ProcessTask(setup); } - GroupItem localTask() final { + + GroupItem localTask() final + { const auto setup = [this](Async &async) { async.setConcurrentCallData(localRead, m_filePath); Async *asyncPtr = &async; @@ -249,7 +271,8 @@ signals: void started(); private: - GroupItem remoteTask() final { + GroupItem remoteTask() final + { const auto onSetup = [this](Process &process) { m_writeBuffer = new WriteBuffer(false, &process); connect(m_writeBuffer, &WriteBuffer::writeRequested, &process, &Process::writeRaw);