File: pushrules.h

package info (click to toggle)
libquotient 0.9.5-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 5,588 kB
  • sloc: xml: 39,103; cpp: 25,226; sh: 97; makefile: 10
file content (246 lines) | stat: -rw-r--r-- 8,803 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
// THIS FILE IS GENERATED - ANY EDITS WILL BE OVERWRITTEN

#pragma once

#include <Quotient/csapi/definitions/push_condition.h>
#include <Quotient/csapi/definitions/push_rule.h>
#include <Quotient/csapi/definitions/push_ruleset.h>

#include <Quotient/jobs/basejob.h>

namespace Quotient {

//! \brief Retrieve all push rulesets.
//!
//! Retrieve all push rulesets for this user. Currently the only push ruleset
//! defined is `global`.
class QUOTIENT_API GetPushRulesJob : public BaseJob {
public:
    explicit GetPushRulesJob();

    //! \brief Construct a URL without creating a full-fledged job object
    //!
    //! This function can be used when a URL for GetPushRulesJob
    //! is necessary but the job itself isn't.
    static QUrl makeRequestUrl(const HomeserverData& hsData);

    // Result properties

    //! The global ruleset.
    PushRuleset global() const { return loadFromJson<PushRuleset>("global"_L1); }
};

inline auto collectResponse(const GetPushRulesJob* job) { return job->global(); }

//! \brief Retrieve all push rules.
//!
//! Retrieve all push rules for this user.
class QUOTIENT_API GetPushRulesGlobalJob : public BaseJob {
public:
    explicit GetPushRulesGlobalJob();

    //! \brief Construct a URL without creating a full-fledged job object
    //!
    //! This function can be used when a URL for GetPushRulesGlobalJob
    //! is necessary but the job itself isn't.
    static QUrl makeRequestUrl(const HomeserverData& hsData);

    // Result properties

    //! All the push rules for this user.
    PushRuleset data() const { return fromJson<PushRuleset>(jsonData()); }
};

inline auto collectResponse(const GetPushRulesGlobalJob* job) { return job->data(); }

//! \brief Retrieve a push rule.
//!
//! Retrieve a single specified push rule.
class QUOTIENT_API GetPushRuleJob : public BaseJob {
public:
    //! \param kind
    //!   The kind of rule
    //!
    //! \param ruleId
    //!   The identifier for the rule.
    explicit GetPushRuleJob(const QString& kind, const QString& ruleId);

    //! \brief Construct a URL without creating a full-fledged job object
    //!
    //! This function can be used when a URL for GetPushRuleJob
    //! is necessary but the job itself isn't.
    static QUrl makeRequestUrl(const HomeserverData& hsData, const QString& kind,
                               const QString& ruleId);

    // Result properties

    //! The specific push rule. This will also include keys specific to the
    //! rule itself such as the rule's `actions` and `conditions` if set.
    PushRule pushRule() const { return fromJson<PushRule>(jsonData()); }
};

inline auto collectResponse(const GetPushRuleJob* job) { return job->pushRule(); }

//! \brief Delete a push rule.
//!
//! This endpoint removes the push rule defined in the path.
class QUOTIENT_API DeletePushRuleJob : public BaseJob {
public:
    //! \param kind
    //!   The kind of rule
    //!
    //! \param ruleId
    //!   The identifier for the rule.
    explicit DeletePushRuleJob(const QString& kind, const QString& ruleId);

    //! \brief Construct a URL without creating a full-fledged job object
    //!
    //! This function can be used when a URL for DeletePushRuleJob
    //! is necessary but the job itself isn't.
    static QUrl makeRequestUrl(const HomeserverData& hsData, const QString& kind,
                               const QString& ruleId);
};

//! \brief Add or change a push rule.
//!
//! This endpoint allows the creation and modification of user defined push
//! rules.
//!
//! If a rule with the same `rule_id` already exists among rules of the same
//! kind, it is updated with the new parameters, otherwise a new rule is
//! created.
//!
//! If both `after` and `before` are provided, the new or updated rule must
//! be the next most important rule with respect to the rule identified by
//! `before`.
//!
//! If neither `after` nor `before` are provided and the rule is created, it
//! should be added as the most important user defined rule among rules of
//! the same kind.
//!
//! When creating push rules, they MUST be enabled by default.
class QUOTIENT_API SetPushRuleJob : public BaseJob {
public:
    //! \param kind
    //!   The kind of rule
    //!
    //! \param ruleId
    //!   The identifier for the rule. If the string starts with a dot ("."),
    //!   the request MUST be rejected as this is reserved for server-default
    //!   rules. Slashes ("/") and backslashes ("\\") are also not allowed.
    //!
    //! \param actions
    //!   The action(s) to perform when the conditions for this rule are met.
    //!
    //! \param before
    //!   Use 'before' with a `rule_id` as its value to make the new rule the
    //!   next-most important rule with respect to the given user defined rule.
    //!   It is not possible to add a rule relative to a predefined server rule.
    //!
    //! \param after
    //!   This makes the new rule the next-less important rule relative to the
    //!   given user defined rule. It is not possible to add a rule relative
    //!   to a predefined server rule.
    //!
    //! \param conditions
    //!   The conditions that must hold true for an event in order for a
    //!   rule to be applied to an event. A rule with no conditions
    //!   always matches. Only applicable to `underride` and `override` rules.
    //!
    //! \param pattern
    //!   Only applicable to `content` rules. The glob-style pattern to match against.
    explicit SetPushRuleJob(const QString& kind, const QString& ruleId,
                            const QVector<QVariant>& actions, const QString& before = {},
                            const QString& after = {}, const QVector<PushCondition>& conditions = {},
                            const QString& pattern = {});
};

//! \brief Get whether a push rule is enabled
//!
//! This endpoint gets whether the specified push rule is enabled.
class QUOTIENT_API IsPushRuleEnabledJob : public BaseJob {
public:
    //! \param kind
    //!   The kind of rule
    //!
    //! \param ruleId
    //!   The identifier for the rule.
    explicit IsPushRuleEnabledJob(const QString& kind, const QString& ruleId);

    //! \brief Construct a URL without creating a full-fledged job object
    //!
    //! This function can be used when a URL for IsPushRuleEnabledJob
    //! is necessary but the job itself isn't.
    static QUrl makeRequestUrl(const HomeserverData& hsData, const QString& kind,
                               const QString& ruleId);

    // Result properties

    //! Whether the push rule is enabled or not.
    bool enabled() const { return loadFromJson<bool>("enabled"_L1); }
};

inline auto collectResponse(const IsPushRuleEnabledJob* job) { return job->enabled(); }

//! \brief Enable or disable a push rule.
//!
//! This endpoint allows clients to enable or disable the specified push rule.
class QUOTIENT_API SetPushRuleEnabledJob : public BaseJob {
public:
    //! \param kind
    //!   The kind of rule
    //!
    //! \param ruleId
    //!   The identifier for the rule.
    //!
    //! \param enabled
    //!   Whether the push rule is enabled or not.
    explicit SetPushRuleEnabledJob(const QString& kind, const QString& ruleId, bool enabled);
};

//! \brief The actions for a push rule
//!
//! This endpoint get the actions for the specified push rule.
class QUOTIENT_API GetPushRuleActionsJob : public BaseJob {
public:
    //! \param kind
    //!   The kind of rule
    //!
    //! \param ruleId
    //!   The identifier for the rule.
    explicit GetPushRuleActionsJob(const QString& kind, const QString& ruleId);

    //! \brief Construct a URL without creating a full-fledged job object
    //!
    //! This function can be used when a URL for GetPushRuleActionsJob
    //! is necessary but the job itself isn't.
    static QUrl makeRequestUrl(const HomeserverData& hsData, const QString& kind,
                               const QString& ruleId);

    // Result properties

    //! The action(s) to perform for this rule.
    QVector<QVariant> actions() const { return loadFromJson<QVector<QVariant>>("actions"_L1); }
};

inline auto collectResponse(const GetPushRuleActionsJob* job) { return job->actions(); }

//! \brief Set the actions for a push rule.
//!
//! This endpoint allows clients to change the actions of a push rule.
//! This can be used to change the actions of builtin rules.
class QUOTIENT_API SetPushRuleActionsJob : public BaseJob {
public:
    //! \param kind
    //!   The kind of rule
    //!
    //! \param ruleId
    //!   The identifier for the rule.
    //!
    //! \param actions
    //!   The action(s) to perform for this rule.
    explicit SetPushRuleActionsJob(const QString& kind, const QString& ruleId,
                                   const QVector<QVariant>& actions);
};

} // namespace Quotient