1/******************************************************************************
2 * THIS FILE IS GENERATED - ANY EDITS WILL BE OVERWRITTEN
3 */
4
5#pragma once
6
7#include <Quotient/jobs/basejob.h>
8
9namespace Quotient {
10
11/*! \brief Gets the current pushers for the authenticated user
12 *
13 * Gets all currently active pushers for the authenticated user.
14 */
15class QUOTIENT_API GetPushersJob : public BaseJob {
16public:
17 // Inner data structures
18
19 /// A dictionary of information for the pusher implementation
20 /// itself.
21 struct PusherData {
22 /// Required if `kind` is `http`. The URL to use to send
23 /// notifications to.
24 QUrl url{};
25 /// The format to use when sending notifications to the Push
26 /// Gateway.
27 QString format{};
28 };
29
30 /// Gets all currently active pushers for the authenticated user.
31 struct Pusher {
32 /// This is a unique identifier for this pusher. See `/set` for
33 /// more detail.
34 /// Max length, 512 bytes.
35 QString pushkey;
36 /// The kind of pusher. `"http"` is a pusher that
37 /// sends HTTP pokes.
38 QString kind;
39 /// This is a reverse-DNS style identifier for the application.
40 /// Max length, 64 chars.
41 QString appId;
42 /// A string that will allow the user to identify what application
43 /// owns this pusher.
44 QString appDisplayName;
45 /// A string that will allow the user to identify what device owns
46 /// this pusher.
47 QString deviceDisplayName;
48 /// The preferred language for receiving notifications (e.g. 'en'
49 /// or 'en-US')
50 QString lang;
51 /// A dictionary of information for the pusher implementation
52 /// itself.
53 PusherData data;
54 /// This string determines which set of device specific rules this
55 /// pusher executes.
56 QString profileTag{};
57 };
58
59 // Construction/destruction
60
61 /// Gets the current pushers for the authenticated user
62 explicit GetPushersJob();
63
64 /*! \brief Construct a URL without creating a full-fledged job object
65 *
66 * This function can be used when a URL for GetPushersJob
67 * is necessary but the job itself isn't.
68 */
69 static QUrl makeRequestUrl(QUrl baseUrl);
70
71 // Result properties
72
73 /// An array containing the current pushers for the user
74 QVector<Pusher> pushers() const
75 {
76 return loadFromJson<QVector<Pusher>>(keyName: "pushers"_ls);
77 }
78};
79
80template <>
81struct JsonObjectConverter<GetPushersJob::PusherData> {
82 static void fillFrom(const QJsonObject& jo,
83 GetPushersJob::PusherData& result)
84 {
85 fillFromJson(jv: jo.value(key: "url"_ls), pod&: result.url);
86 fillFromJson(jv: jo.value(key: "format"_ls), pod&: result.format);
87 }
88};
89
90template <>
91struct JsonObjectConverter<GetPushersJob::Pusher> {
92 static void fillFrom(const QJsonObject& jo, GetPushersJob::Pusher& result)
93 {
94 fillFromJson(jv: jo.value(key: "pushkey"_ls), pod&: result.pushkey);
95 fillFromJson(jv: jo.value(key: "kind"_ls), pod&: result.kind);
96 fillFromJson(jv: jo.value(key: "app_id"_ls), pod&: result.appId);
97 fillFromJson(jv: jo.value(key: "app_display_name"_ls), pod&: result.appDisplayName);
98 fillFromJson(jv: jo.value(key: "device_display_name"_ls),
99 pod&: result.deviceDisplayName);
100 fillFromJson(jv: jo.value(key: "lang"_ls), pod&: result.lang);
101 fillFromJson(jv: jo.value(key: "data"_ls), pod&: result.data);
102 fillFromJson(jv: jo.value(key: "profile_tag"_ls), pod&: result.profileTag);
103 }
104};
105
106/*! \brief Modify a pusher for this user on the homeserver.
107 *
108 * This endpoint allows the creation, modification and deletion of
109 * [pushers](/client-server-api/#push-notifications) for this user ID. The
110 * behaviour of this endpoint varies depending on the values in the JSON body.
111 *
112 * If `kind` is not `null`, the pusher with this `app_id` and `pushkey`
113 * for this user is updated, or it is created if it doesn't exist. If
114 * `kind` is `null`, the pusher with this `app_id` and `pushkey` for this
115 * user is deleted.
116 */
117class QUOTIENT_API PostPusherJob : public BaseJob {
118public:
119 // Inner data structures
120
121 /// Required if `kind` is not `null`. A dictionary of information
122 /// for the pusher implementation itself. If `kind` is `http`,
123 /// this should contain `url` which is the URL to use to send
124 /// notifications to.
125 struct PusherData {
126 /// Required if `kind` is `http`. The URL to use to send
127 /// notifications to. MUST be an HTTPS URL with a path of
128 /// `/_matrix/push/v1/notify`.
129 QUrl url{};
130 /// The format to send notifications in to Push Gateways if the
131 /// `kind` is `http`. The details about what fields the
132 /// homeserver should send to the push gateway are defined in the
133 /// [Push Gateway Specification](/push-gateway-api/). Currently the only
134 /// format available is 'event_id_only'.
135 QString format{};
136 };
137
138 // Construction/destruction
139
140 /*! \brief Modify a pusher for this user on the homeserver.
141 *
142 * \param pushkey
143 * This is a unique identifier for this pusher. The value you
144 * should use for this is the routing or destination address
145 * information for the notification, for example, the APNS token
146 * for APNS or the Registration ID for GCM. If your notification
147 * client has no such concept, use any unique identifier.
148 * Max length, 512 bytes.
149 *
150 * If the `kind` is `"email"`, this is the email address to
151 * send notifications to.
152 *
153 * \param kind
154 * The kind of pusher to configure. `"http"` makes a pusher that
155 * sends HTTP pokes. `"email"` makes a pusher that emails the
156 * user with unread notifications. `null` deletes the pusher.
157 *
158 * \param appId
159 * This is a reverse-DNS style identifier for the application.
160 * It is recommended that this end with the platform, such that
161 * different platform versions get different app identifiers.
162 * Max length, 64 chars.
163 *
164 * If the `kind` is `"email"`, this is `"m.email"`.
165 *
166 * \param appDisplayName
167 * Required if `kind` is not `null`. A string that will allow the
168 * user to identify what application owns this pusher.
169 *
170 * \param deviceDisplayName
171 * Required if `kind` is not `null`. A string that will allow the
172 * user to identify what device owns this pusher.
173 *
174 * \param profileTag
175 * This string determines which set of device specific rules this
176 * pusher executes.
177 *
178 * \param lang
179 * Required if `kind` is not `null`. The preferred language for
180 * receiving notifications (e.g. 'en' or 'en-US').
181 *
182 * \param data
183 * Required if `kind` is not `null`. A dictionary of information
184 * for the pusher implementation itself. If `kind` is `http`,
185 * this should contain `url` which is the URL to use to send
186 * notifications to.
187 *
188 * \param append
189 * If true, the homeserver should add another pusher with the
190 * given pushkey and App ID in addition to any others with
191 * different user IDs. Otherwise, the homeserver must remove any
192 * other pushers with the same App ID and pushkey for different
193 * users. The default is `false`.
194 */
195 explicit PostPusherJob(const QString& pushkey, const QString& kind,
196 const QString& appId,
197 const QString& appDisplayName = {},
198 const QString& deviceDisplayName = {},
199 const QString& profileTag = {},
200 const QString& lang = {},
201 const Omittable<PusherData>& data = none,
202 Omittable<bool> append = none);
203};
204
205template <>
206struct JsonObjectConverter<PostPusherJob::PusherData> {
207 static void dumpTo(QJsonObject& jo, const PostPusherJob::PusherData& pod)
208 {
209 addParam<IfNotEmpty>(container&: jo, QStringLiteral("url"), value: pod.url);
210 addParam<IfNotEmpty>(container&: jo, QStringLiteral("format"), value: pod.format);
211 }
212};
213
214} // namespace Quotient
215