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
11namespace Quotient {
12class QUOTIENT_API MemberEventContent {
13public:
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
30using MembershipType [[deprecated("Use Membership instead")]] = Membership;
31
32class QUOTIENT_API RoomMemberEvent
33 : public KeyedStateEventBase<RoomMemberEvent, MemberEventContent> {
34 Q_GADGET
35public:
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