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
|
// THIS FILE IS GENERATED - ANY EDITS WILL BE OVERWRITTEN
#pragma once
#include <Quotient/events/event.h>
#include <Quotient/jobs/basejob.h>
namespace Quotient {
//! \brief Gets a list of events that the user has been notified about
//!
//! This API is used to paginate through the list of events that the
//! user has been, or would have been notified about.
class QUOTIENT_API GetNotificationsJob : public BaseJob {
public:
// Inner data structures
struct QUOTIENT_API Notification {
//! The action(s) to perform when the conditions for this rule are met.
//! See [Push Rules: API](/client-server-api/#push-rules-api).
QVector<QVariant> actions;
//! The Event object for the event that triggered the notification.
EventPtr event;
//! Indicates whether the user has sent a read receipt indicating
//! that they have read this message.
bool read;
//! The ID of the room in which the event was posted.
QString roomId;
//! The unix timestamp at which the event notification was sent,
//! in milliseconds.
qint64 ts;
//! The profile tag of the rule that matched this event.
QString profileTag{};
};
// Construction/destruction
//! \param from
//! Pagination token to continue from. This should be the `next_token`
//! returned from an earlier call to this endpoint.
//!
//! \param limit
//! Limit on the number of events to return in this request.
//!
//! \param only
//! Allows basic filtering of events returned. Supply `highlight`
//! to return only events where the notification had the highlight
//! tweak set.
explicit GetNotificationsJob(const QString& from = {}, std::optional<int> limit = std::nullopt,
const QString& only = {});
//! \brief Construct a URL without creating a full-fledged job object
//!
//! This function can be used when a URL for GetNotificationsJob
//! is necessary but the job itself isn't.
static QUrl makeRequestUrl(const HomeserverData& hsData, const QString& from = {},
std::optional<int> limit = std::nullopt, const QString& only = {});
// Result properties
//! The token to supply in the `from` param of the next
//! `/notifications` request in order to request more
//! events. If this is absent, there are no more results.
QString nextToken() const { return loadFromJson<QString>("next_token"_L1); }
//! The list of events that triggered notifications.
std::vector<Notification> notifications()
{
return takeFromJson<std::vector<Notification>>("notifications"_L1);
}
struct Response {
//! The token to supply in the `from` param of the next
//! `/notifications` request in order to request more
//! events. If this is absent, there are no more results.
QString nextToken{};
//! The list of events that triggered notifications.
std::vector<Notification> notifications{};
};
};
template <std::derived_from<GetNotificationsJob> JobT>
constexpr inline auto doCollectResponse<JobT> =
[](JobT* j) -> GetNotificationsJob::Response { return { j->nextToken(), j->notifications() }; };
template <>
struct QUOTIENT_API JsonObjectConverter<GetNotificationsJob::Notification> {
static void fillFrom(const QJsonObject& jo, GetNotificationsJob::Notification& result)
{
fillFromJson(jo.value("actions"_L1), result.actions);
fillFromJson(jo.value("event"_L1), result.event);
fillFromJson(jo.value("read"_L1), result.read);
fillFromJson(jo.value("room_id"_L1), result.roomId);
fillFromJson(jo.value("ts"_L1), result.ts);
fillFromJson(jo.value("profile_tag"_L1), result.profileTag);
}
};
} // namespace Quotient
|