diff options
author | Kitsune Ral <Kitsune-Ral@users.sf.net> | 2018-07-28 18:57:29 +0900 |
---|---|---|
committer | Kitsune Ral <Kitsune-Ral@users.sf.net> | 2018-07-28 18:57:29 +0900 |
commit | 941cfdf8b591bf14002f28e99e06c200dc5bcc84 (patch) | |
tree | 6c02e8817b02a8e1fffeb70d30013565c7ae856f | |
parent | 53521f42d15d2553028bae09f1cd12206bc32955 (diff) | |
download | libquotient-941cfdf8b591bf14002f28e99e06c200dc5bcc84.tar.gz libquotient-941cfdf8b591bf14002f28e99e06c200dc5bcc84.zip |
csapi/third_party_lookup.*: Properly pass a variadic (aka exploded) parameters
Most of the actual change was in the API definition files (thanks to @anoadragon453), plus a converter from a QJsonObject map to the URL query string.
-rw-r--r-- | lib/converters.h | 6 | ||||
-rw-r--r-- | lib/csapi/third_party_lookup.cpp | 8 | ||||
-rw-r--r-- | lib/csapi/third_party_lookup.h | 5 |
3 files changed, 13 insertions, 6 deletions
diff --git a/lib/converters.h b/lib/converters.h index 1a8f3cfa..1e828393 100644 --- a/lib/converters.h +++ b/lib/converters.h @@ -331,6 +331,12 @@ namespace QMatrixClient q.addQueryItem(k, v); } + inline void addTo(QUrlQuery& q, const QString&, const QJsonObject& vals) + { + for (auto it = vals.begin(); it != vals.end(); ++it) + q.addQueryItem(it.key(), it.value().toString()); + } + // This one is for types that don't have isEmpty() template <typename ValT, bool Force = true, typename = bool> struct AddNode diff --git a/lib/csapi/third_party_lookup.cpp b/lib/csapi/third_party_lookup.cpp index 4396738c..45ccb7c3 100644 --- a/lib/csapi/third_party_lookup.cpp +++ b/lib/csapi/third_party_lookup.cpp @@ -142,14 +142,14 @@ class QueryUserByProtocolJob::Private QVector<ThirdPartyUser> data; }; -BaseJob::Query queryToQueryUserByProtocol(const QString& fields) +BaseJob::Query queryToQueryUserByProtocol(const QJsonObject& fields) { BaseJob::Query _q; - addParam<IfNotEmpty>(_q, QStringLiteral("fields..."), fields); + addParam<IfNotEmpty>(_q, QStringLiteral("fields"), fields); return _q; } -QUrl QueryUserByProtocolJob::makeRequestUrl(QUrl baseUrl, const QString& protocol, const QString& fields) +QUrl QueryUserByProtocolJob::makeRequestUrl(QUrl baseUrl, const QString& protocol, const QJsonObject& fields) { return BaseJob::makeRequestUrl(std::move(baseUrl), basePath % "/thirdparty/user/" % protocol, @@ -158,7 +158,7 @@ QUrl QueryUserByProtocolJob::makeRequestUrl(QUrl baseUrl, const QString& protoco static const auto QueryUserByProtocolJobName = QStringLiteral("QueryUserByProtocolJob"); -QueryUserByProtocolJob::QueryUserByProtocolJob(const QString& protocol, const QString& fields) +QueryUserByProtocolJob::QueryUserByProtocolJob(const QString& protocol, const QJsonObject& fields) : BaseJob(HttpVerb::Get, QueryUserByProtocolJobName, basePath % "/thirdparty/user/" % protocol, queryToQueryUserByProtocol(fields), diff --git a/lib/csapi/third_party_lookup.h b/lib/csapi/third_party_lookup.h index 03d607a8..a431b87a 100644 --- a/lib/csapi/third_party_lookup.h +++ b/lib/csapi/third_party_lookup.h @@ -7,6 +7,7 @@ #include "jobs/basejob.h" #include "csapi/../application-service/definitions/user.h" +#include <QtCore/QJsonObject> #include "csapi/../application-service/definitions/location.h" #include <QtCore/QHash> #include <QtCore/QVector> @@ -143,7 +144,7 @@ namespace QMatrixClient * \param fields * One or more custom fields that are passed to the AS to help identify the user. */ - explicit QueryUserByProtocolJob(const QString& protocol, const QString& fields = {}); + explicit QueryUserByProtocolJob(const QString& protocol, const QJsonObject& fields = {}); /*! Construct a URL without creating a full-fledged job object * @@ -151,7 +152,7 @@ namespace QMatrixClient * QueryUserByProtocolJob is necessary but the job * itself isn't. */ - static QUrl makeRequestUrl(QUrl baseUrl, const QString& protocol, const QString& fields = {}); + static QUrl makeRequestUrl(QUrl baseUrl, const QString& protocol, const QJsonObject& fields = {}); ~QueryUserByProtocolJob() override; |