forked from qt-creator/qt-creator
Axivion: Parameterize recipe for re-use
The recipe which fetches the issue properties works in general equally to the one needed to fetch source code for a given analysis version. This patch provides this function but does not make any use of it yet. Change-Id: I5bd63eb470e9cb7038aaae5e4c79fa2d570d45db Reviewed-by: Jarek Kobus <jaroslaw.kobus@qt.io>
This commit is contained in:
@@ -376,6 +376,7 @@ static QUrl constructUrl(const QString &projectName, const QString &subPath, con
|
||||
|
||||
static constexpr int httpStatusCodeOk = 200;
|
||||
constexpr char s_htmlContentType[] = "text/html";
|
||||
constexpr char s_plaintextContentType[] = "text/plain";
|
||||
constexpr char s_jsonContentType[] = "application/json";
|
||||
|
||||
static bool isServerAccessEstablished()
|
||||
@@ -384,15 +385,17 @@ static bool isServerAccessEstablished()
|
||||
|| (dd->m_serverAccess == ServerAccess::WithAuthorization && dd->m_apiToken);
|
||||
}
|
||||
|
||||
static Group fetchHtmlRecipe(const QUrl &url, const std::function<void(const QByteArray &)> &handler)
|
||||
static Group fetchSimpleRecipe(const QUrl &url,
|
||||
const QByteArray &expectedContentType,
|
||||
const std::function<void(const QByteArray &)> &handler)
|
||||
{
|
||||
// TODO: Refactor so that it's a common code with fetchDataRecipe().
|
||||
const auto onQuerySetup = [url](NetworkQuery &query) {
|
||||
const auto onQuerySetup = [url, expectedContentType](NetworkQuery &query) {
|
||||
if (!isServerAccessEstablished())
|
||||
return SetupResult::StopWithError; // TODO: start authorizationRecipe()?
|
||||
|
||||
QNetworkRequest request(url);
|
||||
request.setRawHeader("Accept", s_htmlContentType);
|
||||
request.setRawHeader("Accept", expectedContentType);
|
||||
if (dd->m_serverAccess == ServerAccess::WithAuthorization && dd->m_apiToken)
|
||||
request.setRawHeader("Authorization", "AxToken " + *dd->m_apiToken);
|
||||
const QByteArray ua = "Axivion" + QCoreApplication::applicationName().toUtf8() +
|
||||
@@ -402,7 +405,7 @@ static Group fetchHtmlRecipe(const QUrl &url, const std::function<void(const QBy
|
||||
query.setNetworkAccessManager(&dd->m_networkAccessManager);
|
||||
return SetupResult::Continue;
|
||||
};
|
||||
const auto onQueryDone = [url, handler](const NetworkQuery &query, DoneWith doneWith) {
|
||||
const auto onQueryDone = [url, expectedContentType, handler](const NetworkQuery &query, DoneWith doneWith) {
|
||||
QNetworkReply *reply = query.reply();
|
||||
const int statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
|
||||
const QString contentType = reply->header(QNetworkRequest::ContentTypeHeader)
|
||||
@@ -412,7 +415,7 @@ static Group fetchHtmlRecipe(const QUrl &url, const std::function<void(const QBy
|
||||
.trimmed()
|
||||
.toLower();
|
||||
if (doneWith == DoneWith::Success && statusCode == httpStatusCodeOk
|
||||
&& contentType == s_htmlContentType) {
|
||||
&& contentType == QString::fromUtf8(expectedContentType)) {
|
||||
handler(reply->readAll());
|
||||
return DoneResult::Success;
|
||||
}
|
||||
@@ -421,6 +424,16 @@ static Group fetchHtmlRecipe(const QUrl &url, const std::function<void(const QBy
|
||||
return {NetworkQueryTask(onQuerySetup, onQueryDone)};
|
||||
}
|
||||
|
||||
static Group fetchHtmlRecipe(const QUrl &url, const std::function<void(const QByteArray &)> &handler)
|
||||
{
|
||||
return fetchSimpleRecipe(url, s_htmlContentType, handler);
|
||||
}
|
||||
|
||||
static Group fetchPlainTextRecipe(const QUrl &url, const std::function<void(const QByteArray &)> &handler)
|
||||
{
|
||||
return fetchSimpleRecipe(url, s_plaintextContentType, handler);
|
||||
}
|
||||
|
||||
template <typename DtoType, template <typename> typename DtoStorageType>
|
||||
static Group dtoRecipe(const Storage<DtoStorageType<DtoType>> &dtoStorage)
|
||||
{
|
||||
@@ -801,6 +814,18 @@ Group lineMarkerRecipe(const FilePath &filePath, const LineMarkerHandler &handle
|
||||
return fetchDataRecipe<Dto::FileViewDto>(url, handler);
|
||||
}
|
||||
|
||||
Group fileSourceRecipe(const FilePath &filePath, const std::function<void(const QByteArray &)> &handler)
|
||||
{
|
||||
QTC_ASSERT(dd->m_currentProjectInfo, return {}); // TODO: Call handler with unexpected
|
||||
QTC_ASSERT(!filePath.isEmpty(), return {}); // TODO: Call handler with unexpected
|
||||
QTC_ASSERT(dd->m_analysisVersion, return {}); // TODO: Call handler with unexpected
|
||||
|
||||
const QString fileName = QString::fromUtf8(QUrl::toPercentEncoding(filePath.path()));
|
||||
const QUrlQuery query({{"filename", fileName}, {"version", *dd->m_analysisVersion}});
|
||||
const QUrl url = constructUrl(dd->m_currentProjectInfo.value().name, "sourcecode", query);
|
||||
return fetchPlainTextRecipe(url, handler);
|
||||
}
|
||||
|
||||
Group issueHtmlRecipe(const QString &issueId, const HtmlHandler &handler)
|
||||
{
|
||||
QTC_ASSERT(dd->m_currentProjectInfo, return {}); // TODO: Call handler with unexpected?
|
||||
|
Reference in New Issue
Block a user