aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKitsune Ral <Kitsune-Ral@users.sf.net>2018-07-28 18:57:29 +0900
committerKitsune Ral <Kitsune-Ral@users.sf.net>2018-07-28 18:57:29 +0900
commit941cfdf8b591bf14002f28e99e06c200dc5bcc84 (patch)
tree6c02e8817b02a8e1fffeb70d30013565c7ae856f
parent53521f42d15d2553028bae09f1cd12206bc32955 (diff)
downloadlibquotient-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.h6
-rw-r--r--lib/csapi/third_party_lookup.cpp8
-rw-r--r--lib/csapi/third_party_lookup.h5
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;