diff options
Diffstat (limited to 'jobs')
-rw-r--r-- | jobs/basejob.cpp | 21 | ||||
-rw-r--r-- | jobs/basejob.h | 8 |
2 files changed, 21 insertions, 8 deletions
diff --git a/jobs/basejob.cpp b/jobs/basejob.cpp index 22ce5bd5..0e3e59d0 100644 --- a/jobs/basejob.cpp +++ b/jobs/basejob.cpp @@ -178,17 +178,22 @@ void BaseJob::setExpectedContentTypes(const QByteArrayList& contentTypes) d->expectedContentTypes = contentTypes; } -void BaseJob::Private::sendRequest() +QUrl BaseJob::makeRequestUrl(QUrl baseUrl, + const QString& path, const QUrlQuery& query) { - QUrl url = connection->baseUrl(); - QString path = url.path(); - if (!path.endsWith('/') && !apiEndpoint.startsWith('/')) - path.push_back('/'); + auto pathBase = baseUrl.path(); + if (!pathBase.endsWith('/') && !path.startsWith('/')) + pathBase.push_back('/'); - url.setPath( path + apiEndpoint ); - url.setQuery(requestQuery); + baseUrl.setPath( pathBase + path ); + baseUrl.setQuery(query); + return baseUrl; +} - QNetworkRequest req {url}; +void BaseJob::Private::sendRequest() +{ + QNetworkRequest req + { makeRequestUrl(connection->baseUrl(), apiEndpoint, requestQuery) }; if (!requestHeaders.contains("Content-Type")) req.setHeader(QNetworkRequest::ContentTypeHeader, "application/json"); req.setRawHeader(QByteArray("Authorization"), diff --git a/jobs/basejob.h b/jobs/basejob.h index e9e108c6..c03c914f 100644 --- a/jobs/basejob.h +++ b/jobs/basejob.h @@ -212,6 +212,14 @@ namespace QMatrixClient void addExpectedContentType(const QByteArray& contentType); void setExpectedContentTypes(const QByteArrayList& contentTypes); + /** Construct a URL out of baseUrl, path and query + * The function automatically adds '/' between baseUrl's path and + * \p path if necessary. The query component of \p baseUrl + * is ignored. + */ + static QUrl makeRequestUrl(QUrl baseUrl, const QString& path, + const QUrlQuery& query = {}); + virtual void beforeStart(const ConnectionData* connData); virtual void afterStart(const ConnectionData* connData, QNetworkReply* reply); |