1/******************************************************************************
2 * THIS FILE IS GENERATED - ANY EDITS WILL BE OVERWRITTEN
3 */
4
5#pragma once
6
7#include <Quotient/jobs/basejob.h>
8
9#include <Quotient/application-service/definitions/location.h>
10#include <Quotient/application-service/definitions/protocol.h>
11#include <Quotient/application-service/definitions/user.h>
12
13namespace Quotient {
14
15/*! \brief Retrieve metadata about all protocols that a homeserver supports.
16 *
17 * Fetches the overall metadata about protocols supported by the
18 * homeserver. Includes both the available protocols and all fields
19 * required for queries against each protocol.
20 */
21class QUOTIENT_API GetProtocolsJob : public BaseJob {
22public:
23 /// Retrieve metadata about all protocols that a homeserver supports.
24 explicit GetProtocolsJob();
25
26 /*! \brief Construct a URL without creating a full-fledged job object
27 *
28 * This function can be used when a URL for GetProtocolsJob
29 * is necessary but the job itself isn't.
30 */
31 static QUrl makeRequestUrl(QUrl baseUrl);
32
33 // Result properties
34
35 /// The protocols supported by the homeserver.
36 QHash<QString, ThirdPartyProtocol> protocols() const
37 {
38 return fromJson<QHash<QString, ThirdPartyProtocol>>(json: jsonData());
39 }
40};
41
42/*! \brief Retrieve metadata about a specific protocol that the homeserver
43 * supports.
44 *
45 * Fetches the metadata from the homeserver about a particular third-party
46 * protocol.
47 */
48class QUOTIENT_API GetProtocolMetadataJob : public BaseJob {
49public:
50 /*! \brief Retrieve metadata about a specific protocol that the homeserver
51 * supports.
52 *
53 * \param protocol
54 * The name of the protocol.
55 */
56 explicit GetProtocolMetadataJob(const QString& protocol);
57
58 /*! \brief Construct a URL without creating a full-fledged job object
59 *
60 * This function can be used when a URL for GetProtocolMetadataJob
61 * is necessary but the job itself isn't.
62 */
63 static QUrl makeRequestUrl(QUrl baseUrl, const QString& protocol);
64
65 // Result properties
66
67 /// The protocol was found and metadata returned.
68 ThirdPartyProtocol data() const
69 {
70 return fromJson<ThirdPartyProtocol>(json: jsonData());
71 }
72};
73
74/*! \brief Retrieve Matrix-side portals rooms leading to a third-party location.
75 *
76 * Requesting this endpoint with a valid protocol name results in a list
77 * of successful mapping results in a JSON array. Each result contains
78 * objects to represent the Matrix room or rooms that represent a portal
79 * to this third-party network. Each has the Matrix room alias string,
80 * an identifier for the particular third-party network protocol, and an
81 * object containing the network-specific fields that comprise this
82 * identifier. It should attempt to canonicalise the identifier as much
83 * as reasonably possible given the network type.
84 */
85class QUOTIENT_API QueryLocationByProtocolJob : public BaseJob {
86public:
87 /*! \brief Retrieve Matrix-side portals rooms leading to a third-party
88 * location.
89 *
90 * \param protocol
91 * The protocol used to communicate to the third-party network.
92 *
93 * \param searchFields
94 * One or more custom fields to help identify the third-party
95 * location.
96 */
97 explicit QueryLocationByProtocolJob(const QString& protocol,
98 const QString& searchFields = {});
99
100 /*! \brief Construct a URL without creating a full-fledged job object
101 *
102 * This function can be used when a URL for QueryLocationByProtocolJob
103 * is necessary but the job itself isn't.
104 */
105 static QUrl makeRequestUrl(QUrl baseUrl, const QString& protocol,
106 const QString& searchFields = {});
107
108 // Result properties
109
110 /// At least one portal room was found.
111 QVector<ThirdPartyLocation> data() const
112 {
113 return fromJson<QVector<ThirdPartyLocation>>(json: jsonData());
114 }
115};
116
117/*! \brief Retrieve the Matrix User ID of a corresponding third-party user.
118 *
119 * Retrieve a Matrix User ID linked to a user on the third-party service, given
120 * a set of user parameters.
121 */
122class QUOTIENT_API QueryUserByProtocolJob : public BaseJob {
123public:
124 /*! \brief Retrieve the Matrix User ID of a corresponding third-party user.
125 *
126 * \param protocol
127 * The name of the protocol.
128 *
129 * \param fields
130 * One or more custom fields that are passed to the AS to help identify
131 * the user.
132 */
133 explicit QueryUserByProtocolJob(const QString& protocol,
134 const QString& fields = {});
135
136 /*! \brief Construct a URL without creating a full-fledged job object
137 *
138 * This function can be used when a URL for QueryUserByProtocolJob
139 * is necessary but the job itself isn't.
140 */
141 static QUrl makeRequestUrl(QUrl baseUrl, const QString& protocol,
142 const QString& fields = {});
143
144 // Result properties
145
146 /// The Matrix User IDs found with the given parameters.
147 QVector<ThirdPartyUser> data() const
148 {
149 return fromJson<QVector<ThirdPartyUser>>(json: jsonData());
150 }
151};
152
153/*! \brief Reverse-lookup third-party locations given a Matrix room alias.
154 *
155 * Retrieve an array of third-party network locations from a Matrix room
156 * alias.
157 */
158class QUOTIENT_API QueryLocationByAliasJob : public BaseJob {
159public:
160 /*! \brief Reverse-lookup third-party locations given a Matrix room alias.
161 *
162 * \param alias
163 * The Matrix room alias to look up.
164 */
165 explicit QueryLocationByAliasJob(const QString& alias);
166
167 /*! \brief Construct a URL without creating a full-fledged job object
168 *
169 * This function can be used when a URL for QueryLocationByAliasJob
170 * is necessary but the job itself isn't.
171 */
172 static QUrl makeRequestUrl(QUrl baseUrl, const QString& alias);
173
174 // Result properties
175
176 /// All found third-party locations.
177 QVector<ThirdPartyLocation> data() const
178 {
179 return fromJson<QVector<ThirdPartyLocation>>(json: jsonData());
180 }
181};
182
183/*! \brief Reverse-lookup third-party users given a Matrix User ID.
184 *
185 * Retrieve an array of third-party users from a Matrix User ID.
186 */
187class QUOTIENT_API QueryUserByIDJob : public BaseJob {
188public:
189 /*! \brief Reverse-lookup third-party users given a Matrix User ID.
190 *
191 * \param userid
192 * The Matrix User ID to look up.
193 */
194 explicit QueryUserByIDJob(const QString& userid);
195
196 /*! \brief Construct a URL without creating a full-fledged job object
197 *
198 * This function can be used when a URL for QueryUserByIDJob
199 * is necessary but the job itself isn't.
200 */
201 static QUrl makeRequestUrl(QUrl baseUrl, const QString& userid);
202
203 // Result properties
204
205 /// An array of third-party users.
206 QVector<ThirdPartyUser> data() const
207 {
208 return fromJson<QVector<ThirdPartyUser>>(json: jsonData());
209 }
210};
211
212} // namespace Quotient
213