1 | // SPDX-FileCopyrightText: 2015 Felix Rohrbach <kde@fxrh.de> |
2 | // SPDX-FileCopyrightText: 2017 Kitsune Ral <Kitsune-Ral@users.sf.net> |
3 | // SPDX-FileCopyrightText: 2019 Karol Kosek <krkkx@protonmail.com> |
4 | // SPDX-License-Identifier: LGPL-2.1-or-later |
5 | |
6 | #pragma once |
7 | |
8 | #include "stateevent.h" |
9 | #include <Quotient/quotient_common.h> |
10 | |
11 | namespace Quotient { |
12 | class QUOTIENT_API MemberEventContent { |
13 | public: |
14 | using MembershipType |
15 | [[deprecated("Use Quotient::Membership instead" )]] = Membership; |
16 | |
17 | // NOLINTNEXTLINE(google-explicit-constructor) |
18 | QUO_IMPLICIT MemberEventContent(Membership ms) : membership(ms) {} |
19 | explicit MemberEventContent(const QJsonObject& json); |
20 | QJsonObject toJson() const; |
21 | |
22 | Membership membership; |
23 | /// (Only for invites) Whether the invite is to a direct chat |
24 | bool isDirect = false; |
25 | Omittable<QString> displayName; |
26 | Omittable<QUrl> avatarUrl; |
27 | QString reason; |
28 | }; |
29 | |
30 | using MembershipType [[deprecated("Use Membership instead" )]] = Membership; |
31 | |
32 | class QUOTIENT_API RoomMemberEvent |
33 | : public KeyedStateEventBase<RoomMemberEvent, MemberEventContent> { |
34 | Q_GADGET |
35 | public: |
36 | QUO_EVENT(RoomMemberEvent, "m.room.member" ) |
37 | |
38 | using MembershipType |
39 | [[deprecated("Use Quotient::Membership instead" )]] = Membership; |
40 | |
41 | using KeyedStateEventBase::KeyedStateEventBase; |
42 | |
43 | Membership membership() const { return content().membership; } |
44 | QString userId() const { return stateKey(); } |
45 | bool isDirect() const { return content().isDirect; } |
46 | Omittable<QString> newDisplayName() const { return content().displayName; } |
47 | Omittable<QUrl> newAvatarUrl() const { return content().avatarUrl; } |
48 | [[deprecated("Use newDisplayName() instead" )]] QString displayName() const |
49 | { |
50 | return newDisplayName().value_or(u: QString()); |
51 | } |
52 | [[deprecated("Use newAvatarUrl() instead" )]] QUrl avatarUrl() const |
53 | { |
54 | return newAvatarUrl().value_or(u: QUrl()); |
55 | } |
56 | QString reason() const { return content().reason; } |
57 | bool changesMembership() const; |
58 | bool isBan() const; |
59 | bool isUnban() const; |
60 | bool isInvite() const; |
61 | bool isRejectedInvite() const; |
62 | bool isJoin() const; |
63 | bool isLeave() const; |
64 | bool isRename() const; |
65 | bool isAvatarUpdate() const; |
66 | }; |
67 | } // namespace Quotient |
68 | |